Docker + Ollama + OpenCode

如果你不想让来自国外的黑箱编码代理在你的电脑上运行,这个解决方案可能会帮助你。我已经在我的电脑上安装了一个 Ollama 实例。

Docker + Ollama + OpenCode

如果你不想让来自国外的黑箱编码代理在你的电脑上运行,这个解决方案可能会帮助你。我已经在我的电脑上安装了一个 Ollama 实例。

1、在 Docker 容器中安装 OpenCode

首先是 Dockerfile:

FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
  curl ca-certificates git openssh-client sudo bash jq iputils-ping \
  && rm -rf /var/lib/apt/lists/*

# non-root user
RUN useradd -m -s /bin/bash op \
  && echo "op ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/op \
  && chmod 0440 /etc/sudoers.d/op

USER op
WORKDIR /home/op
ENV HOME=/home/op

# install OpenCode (official installer)
RUN curl -fsSL https://opencode.ai/install | bash

# ensure opencode bin on PATH for non-login shells
ENV PATH=/home/op/.opencode/bin:$PATH

Dockerfile 在容器中安装 OpenCode,你也可以在你的主机(电脑)上安装:

curl https://ollama.ai/install.sh | sh

你的电脑上已经在运行 Ollama,如果没有,看我的另一篇文章了解如何安装,它非常简单。 为了你的 Ollama 编码体验,你可以拉取:

ollama pull deepseek-coder:6.7b

如果你想让 Ollama 在 Docker 容器中运行,你也可以这样做。对于我的情况,我只需要在 docker-compose.yml 中有一个带有 OpenCode 的容器:

services:
  opencode:
    build: .
    container_name: opencode-client
    network_mode: "host"
    user: "1000:1000"
    environment:
      - HOME=/home/op
      - PATH=/home/op/.opencode/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    volumes:
      - ./opencode/config/config.json:/home/op/.config/opencode/config.json:ro
      - ~/.gitconfig:/home/op/.gitconfig:ro
      - ./workspace:/home/op/workspace
    working_dir: /home/op/workspace
    tty: true

接下来,你需要为 OpenCode 配置 config.json 以使用本地的 Ollama:

{
  "$schema": "opencode.ai/config.json",
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Ollama (local)",
      "options": {
        "baseURL": "http://127.0.0.1:11434/v1"
      },
      "models": {
        "deepseek-coder:6.7b": {
          "name": "deepseek-coder:6.7b",
          "tools": true
        }
      }
    }
  }
}

我的目录结构:

OpenCode-Asstiant
    opencode/config/config.json
    Dockerfile
    docker-compose.ymldocker compose build

接下来构建并运行:

docker compose build
docker compose up -d

容器现在正在运行。进入 Docker 容器:

docker exec -u 0 -it <YOUR CONTAINER ID> /bin/bash
# write opencode into the cli
opencode

在进入之前,用 ctrl+p 选择模型

我在我的笔记本上问一个简单的 Python "Hello World" 问题,大约需要 1-2 分钟。如果我有更好的硬件,它会更快,但我至少知道它能工作。

安装后,我觉得最好直接在主机上安装 OpenCode,复制/粘贴在容器中不太好用。

2、不使用 Docker 的 OpenCode 和本地 Ollama

要在本地安装,请使用:

curl -fsSL https://opencode.ai/install | bash

快速安装后,在你的 CLI 中打开一个新终端,你可以去到你想要的软件项目并启动 opencode。

3、使用本地 Ollama 的重要说明

config.json 复制到:

~/.config/opencode/config.json
opencode 的截图菜单
选择本地模型的截图

4、桌面应用

OpenCode 提供了一个桌面应用的下载。在这里,你也可以使用 config.json 作为本地 Ollama 配置。

~/.config/ai.opencode.desktop
带有本地 Ollama 的桌面应用截图

我用其他模型测试了它,它工作良好。

我让它列出我所有项目文件,它快速且正确。然后我问我的 server.py 实际上做了什么,那也是正确的。与本地 Ollama 使用 mistral 8b 相比,它很快,但我不确定 Big Pickle 是哪个模型,也不确定它有多大。

故障排除:

  • 确保模型支持工具调用;并非所有模型都支持。
  • Ollama 默认使用 4k 上下文;代理工具通常需要 16k–32k。

5、修复:增加上下文窗口

阻止 OpenCode 与本地 Ollama 模型一起工作的主要问题是默认的 4096 令牌上下文窗口,对于代理任务(如工具使用,例如文件创建、代码编辑)来说太小了。你必须手动增加它。

ollama run qwen3:8b
>>> /set parameter num_ctx 16384
>>> /save qwen3:8b-16k
>>> /bye

这会创建一个新的模型变体(qwen3:8b-16k),具有更大的上下文。

通过模型文件修复(生产环境推荐):创建一个文件 qwen3-16k-8b.Modelfile

FROM qwen3:8b
PARAMETER num_ctx 16384

然后运行:

ollama create qwen3:8b-16k -f qwen3-16k-8b.Modelfile

更新你的配置:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "qwen3:8b-16k": {
          "name": "Qwen3 8B (16k context)"
        }
      }
    }
  }
}

我没有测试这个配置。如果你测试了,请留言分享你的经验和使用本地 Ollama 和 OpenCode 的缓解措施!


原文链接:OpenCode with Ollama locally — docker container included

汇智网翻译整理,转载请标明出处