Codex Docker 沙箱
从 Dagu Docker 沙箱运行 Codex。
准备包含 Codex CLI 的 runner 镜像,然后让 Dagu 在步骤级或根级 container 中运行 provider: codex。容器能读取文件型 CODEX_HOME 时可复用 ChatGPT 登录;API key 运行可使用 CODEX_API_KEY。
Docker 中的 Codex 登录检查
steps:
- id: codex_login_status
action: harness.run
container:
image: dagu-codex-runner:local
pull_policy: never
working_dir: /workspace
volumes:
- .:/workspace:ro
- ${HOME}/.codex:/codex-home
env:
- CODEX_HOME=/codex-home
with:
provider: shell
prompt: |
set -eu
codex --version
codex login status使用公开的 ghcr.io/openai/codex-universal 基础镜像。
在模型调用前验证 codex --version 和登录状态。
支持挂载 CODEX_HOME 复用 ChatGPT 订阅登录。
支持用 CODEX_API_KEY 进行非交互 codex exec 运行。
01
Runner 镜像
把 Codex 安装到 runner 镜像,并清空基础镜像 entrypoint,让 Dagu 控制命令。镜像用于 DAG 之前应先通过版本检查。
Dockerfile
FROM ghcr.io/openai/codex-universal:latest
USER root
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& rm -rf /var/lib/apt/lists/*
ENV CODEX_NON_INTERACTIVE=1 \
CODEX_INSTALL_DIR=/usr/local/bin
RUN curl -fsSL https://chatgpt.com/codex/install.sh | sh
RUN codex --version
WORKDIR /workspace
ENTRYPOINT []
CMD ["/bin/bash"]02
ChatGPT 订阅认证
如果主机 CLI 已用 ChatGPT 登录且凭据保存在文件中,把该 Codex home 挂载到单独路径,并在容器内设置 CODEX_HOME。
- 不要在该镜像中覆盖 /root/.codex,因为独立包缓存位于那里。
- 如果主机使用 OS keychain,请为 Dagu worker 创建单独的文件型 CODEX_HOME。
- auth.json 包含访问令牌,应作为秘密处理。
03
API key 运行
对于不复用 ChatGPT 登录的自动化,只把 CODEX_API_KEY 传给运行 Codex 的 harness 步骤。
步骤级 Codex 运行
steps:
- id: codex_review
action: harness.run
container:
image: dagu-codex-runner:local
pull_policy: never
working_dir: /workspace
volumes:
- .:/workspace:ro
env:
- CODEX_API_KEY=${CODEX_API_KEY}
with:
provider: codex
prompt: |
Review this repository and summarize the highest-risk issues.04
容器作用域
只有 Codex 需要凭据时使用步骤级 container。只有当 command 步骤和 Codex 需要共享同一工具链和 workspace 时,才使用根级 container。