侧边栏壁纸
  • 累计撰写 109 篇文章
  • 累计创建 54 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

OpenCode Sandbox Docker 部署指南

FlyingEagle
2026-07-23 / 0 评论 / 0 点赞 / 17 阅读 / 3,484 字

OpenCode Sandbox Docker 部署指南

概述

在独立 Docker 容器中运行 OpenCode,提供隔离环境供 Hermes SSH 调用。

Hermes (VPS A) --SSH--> OpenCode 容器 (VPS B)
                         └── 只允许运行 opencode 命令

架构

组件 说明
镜像 Debian Bookworm Slim + OpenCode CLI
SSH 端口 2222 (宿主机)
用户 opencode
资源占用 ~200MB 内存

文件结构

/opt/opencode/
├── docker-compose.yml    # 容器编排
└── opencode-sandbox/
    └── Dockerfile         # 镜像构建

快速部署

1. 创建目录和文件

mkdir -p /opt/opencode
cd /opt/opencode

2. Dockerfile

FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y \
    openssh-server \
    curl \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /run/sshd

# 创建 .ssh 目录
RUN mkdir -p /home/opencode/.ssh && chmod 700 /home/opencode/.ssh

# 安装 opencode
RUN curl -sL "https://github.com/anomalyco/opencode/releases/download/v1.18.4/opencode-linux-x64.tar.gz" | \
    tar -xzf - -C /usr/local/bin && chmod 755 /usr/local/bin/opencode

# 创建用户并修复权限
RUN useradd -m -s /bin/bash opencode && \
    echo "opencode:password" | chpasswd && \
    chown -R opencode:opencode /home/opencode

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

3. docker-compose.yml

services:
  opencode-sandbox:
    build: ./opencode-sandbox
    container_name: opencode-sandbox
    ports:
      - "2222:22"
    restart: unless-stopped
    # 注意:不要在这里挂载 authorized_keys,会被当成目录创建!

4. 构建和启动

cd /opt/opencode
docker compose up -d --build

5. 修复权限问题(如果需要)

如果 Dockerfile 中已添加 chown -R opencode:opencode /home/opencode,这步可以跳过。

否则手动修复:

docker exec -it opencode-sandbox bash -c "chown -R opencode:opencode /home/opencode"

6. 启用 SSH 公钥登录(可选)

# 启用 PubkeyAuthentication
docker exec -it opencode-sandbox bash -c "echo 'PubkeyAuthentication yes' >> /etc/ssh/sshd_config"

# 重启
docker restart opencode-sandbox

7. 设置用户密码

docker exec -it opencode-sandbox bash -c "echo 'opencode:你的密码' | chpasswd"

8. 测试连接

ssh -p 2222 opencode@localhost

配置 SSH 密钥登录(可选)

1. 生成密钥对

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_opencode -N "" -C "opencode-sandbox"

2. 添加公钥到容器

# 查看公钥
cat ~/.ssh/id_ed25519_opencode.pub

# 在容器内创建 authorized_keys
docker exec -it opencode-sandbox bash -c "echo 'ssh-ed25519 AAAAC3... opencode-sandbox' >> /home/opencode/.ssh/authorized_keys"
docker exec -it opencode-sandbox bash -c "chmod 600 /home/opencode/.ssh/authorized_keys"
docker exec -it opencode-sandbox bash -c "chown opencode:opencode /home/opencode/.ssh/authorized_keys"

3. 测试密钥登录

ssh -i ~/.ssh/id_ed25519_opencode -p 2222 opencode@localhost

使用方法

从 Hermes SSH 调用

ssh -p 2222 opencode@VPS_IP "opencode run '你的任务' --model opencode/deepseek-v4-flash-free"

常用命令

# 查看容器状态
docker ps

# 查看日志
docker logs -f opencode-sandbox

# 进入容器
docker exec -it opencode-sandbox bash

# 停止/启动
docker stop opencode-sandbox
docker start opencode-sandbox

限制用户只能运行 opencode(进阶)

authorized_keys 中添加限制:

command="/usr/local/bin/opencode run $SSH_ORIGINAL_COMMAND" ssh-ed25519 AAAA... user@host

这样用户 SSH 登录后只能执行 opencode 命令,无法执行其他操作。

常见问题

Q: SSH 一直重启?

A: 缺少 /run/sshd 目录,确保 Dockerfile 中有 RUN mkdir -p /run/sshd

Q: 公钥登录失败?

A: 检查 /etc/ssh/sshd_configPubkeyAuthentication yes 已启用

Q: 权限被拒绝(EACCES: permission denied, mkdir ‘/home/opencode/.local’)?

A: /home/opencode 属于 root,从宿主机执行:

docker exec -it opencode-sandbox bash -c "chown -R opencode:opencode /home/opencode"

Q: authorized_keys 文件变成了目录?

A: 不要在 docker-compose.yml 里挂载 authorized_keys,手动在容器内创建:

docker exec -it opencode-sandbox bash -c "mkdir -p /home/opencode/.ssh"
docker exec -it opencode-sandbox bash -c "echo '你的公钥' > /home/opencode/.ssh/authorized_keys"

安全建议

建议 说明
使用密钥登录 禁用密码登录
修改默认端口 2222 改为你喜欢的端口
限制命令 使用 command= 限制只能跑 opencode
定期更新 及时更新 OpenCode 版本

更新 OpenCode 版本

cd /opt/opencode

# 修改 Dockerfile 中的版本号
# RUN curl -sL "https://github.com/anomalyco/opencode/releases/download/v1.XX.X/opencode-linux-x64.tar.gz" | \

# 重新构建
docker compose up -d --build
0

评论区