必须在项目根目录构建codex容器并挂载,使用python:3.11-slim镜像,通过codex命令运行测试,支持tui交互、自动修正断言及精准覆盖率分析。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Docker容器中让Codex自动运行项目测试,必须确保Codex能访问完整项目结构、识别测试入口、加载依赖并执行命令,否则会因路径错位或环境缺失直接失败。
准备可运行的Codex容器环境
先创建codex-docker-runner目录并进入:mkdir -p codex-docker-runner && cd codex-docker-runner。
新建Dockerfile,内容为:
FROM python:3.11-slim<br>RUN pip install --no-cache-dir codex-cli==2.4.0<br>COPY . /workspace<br>WORKDIR /workspace
构建镜像:docker build -t codex-runner .。这一步必须用python:3.11-slim而非alpine,因为Codex CLI依赖glibc,Alpine下会报Symbol not found: __libc_start_main错误。
挂载项目并启动容器
确保当前终端位于你的项目根目录(即含pyproject.toml或setup.py的目录),然后执行:
docker run -it --rm -v $(pwd):/workspace codex-runner。
【必须在项目根目录执行挂载,不能在src/或tests/子目录下运行】否则Codex无法解析依赖,后续所有测试命令都会触发ModuleNotFoundError。
通过本地 Codex 或 OpenClaw OAuth 凭证直接调用 ChatGPT/Codex Responses 的 image_generation 工具来生成或编辑光栅图像,然后保存
容器启动后,自动进入/workspace,此时输入codex --version确认CLI可用,再运行ls验证项目文件已完整映射。
在容器内触发测试执行
方法一:交互式TUI方式
输入codex启动界面 → 底部输入框键入“运行全部pytest测试” → 回车 → Codex自动检测pyproject.toml中的[tool.pytest]配置 → 执行pytest -v --tb=short。
方法二:命令行直跑(推荐CI场景)
输入:codex "run tests/" --approval-mode auto-edit。
该指令跳过交互确认,直接执行,并对可判定的断言偏差(如assert x == 5但实际返回6)自动修正测试文件——但仅限于Codex能100%确认是数值误配的场景,不会修改逻辑判断。
方法三:精准绑定源码文件
若要验证src/api.py改动是否影响tests/test_api.py,运行:codex "run tests/test_api.py with coverage" src/api.py。
Codex会解析src/api.py中所有导出函数,动态生成--cov=src.api参数,避免覆盖率统计路径错位到src/顶层导致数据失真。
处理容器内常见失败
第一步:应对ImportError: No module named 'src'
Codex会自动插入export PYTHONPATH=/workspace并前置到后续所有命令,无需手动设置。
第二步:当AssertionError出现且涉及HTTP调用时
Codex不会直接改断言值,而是先尝试curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/health || echo "down";若返回非200,立即中断并提示“请先启动开发服务器”,防止误判为断言错误。
第三步:遇到asyncio.TimeoutError
默认将原timeout=5改为timeout=30,并在对应行上方添加注释# increased due to slow CI env,不改动业务逻辑代码。










