Codex Docker sandbox

شغل Codex من Docker sandbox في Dagu.

استخدم صورة runner تحتوي على Codex CLI، ثم دع Dagu يشغل provider: codex داخل container على مستوى الخطوة أو الجذر. يعمل ChatGPT login عندما تستطيع الحاوية قراءة CODEX_HOME مخزن كملفات؛ وتشغيل API key يستخدم CODEX_API_KEY.

فحص Codex login داخل Docker
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 و login status قبل استدعاءات النموذج.

يدعم CODEX_HOME مربوطا لاستخدام ChatGPT subscription login.

يدعم 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 subscription

إذا كانت CLI على المضيف مسجلة الدخول عبر ChatGPT وكانت credentials مخزنة كملفات، اربط Codex home في مسار منفصل واضبط CODEX_HOME داخل الحاوية.

  • لا تربط فوق /root/.codex في هذه الصورة لأن cache الحزمة المستقلة موجود هناك.
  • إذا كان المضيف يستخدم OS keychain، أنشئ CODEX_HOME منفصلا ومخزنا كملفات لعامل Dagu.
  • auth.json يحتوي access tokens ويجب التعامل معه كسر.
03

تشغيل API key

للأتمتة التي لا تعيد استخدام ChatGPT login، مرر CODEX_API_KEY فقط إلى خطوة harness التي تشغل Codex.

تشغيل 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

نطاق الحاوية

استخدم container على مستوى الخطوة عندما يحتاج Codex وحده إلى credential. استخدم root-level container فقط عندما تحتاج خطوات command و Codex إلى نفس toolchain و workspace.