57 lines
3.5 KiB
Docker
57 lines
3.5 KiB
Docker
# Codex app-server 任务镜像:只含运行环境 + codex 二进制,代码运行时挂载。
|
||
#
|
||
# 构建(在 codex-app-server 仓库根目录,构建上下文就是仓库根):
|
||
# docker build -f cloud/docker/Dockerfile -t codex-app-server:latest \
|
||
# --build-arg CODEX_BIN_DIR=bin .
|
||
#
|
||
# 说明(不要绕过去):
|
||
# - CODEX_BIN_DIR 是调用方在构建主机上提供的配对二进制目录
|
||
# (npm 安装 @openai/codex 后自带 codex + codex-code-mode-host +
|
||
# codex-resources/bwrap,约 367M)。bin/ 不进仓库、不进镜像层
|
||
# 之外的任何地方;没有配对二进制就不要构建,构建会直接失败,
|
||
# 绝不静默用一个缺 sibling 的裸二进制。
|
||
# - host.py / cloud/ 代码不在镜像里:运行时由 DockerExecutor 以
|
||
# 只读方式挂载到 /app(-v <代码目录>:/app:ro),代码改了不用
|
||
# 重新构建镜像;codex 版本变了才需要重新构建。
|
||
# - 任务自己的 worktree 运行时挂载到 /work(可写),绝不挂载宿主
|
||
# 根目录、绝不挂载任何含密钥的目录。
|
||
# - 镜像里不含任何 key:模型 key 运行时由 DockerExecutor 以
|
||
# `-e <env_key名>` 从宿主进程环境注入容器,不写进 Dockerfile、
|
||
# 不写进镜像层、不写进日志。
|
||
# - codex 自带的 bubblewrap 沙箱在容器内是否可用,取决于宿主
|
||
# 的容器权限配置,本镜像不假装解决:真实环境实测时若 bwrap
|
||
# 不可用,host.py 的 sandbox 参数仍可退到 read-only /
|
||
# workspace-write 的控制面约束,见 cloud/README.md。
|
||
ARG PYTHON_VERSION=3.12-slim
|
||
FROM python:${PYTHON_VERSION}
|
||
# 文档 / 图片工具(document-tools、image-workflow 技能的核查项):
|
||
# - pandoc:通用文档转换;poppler-utils:pdftotext(PDF 读回)。
|
||
# - latexmk + texlive-latex-base:pdflatex 编译(英文 LaTeX;
|
||
# 中文 LaTeX 仍需 xelatex + CJK 字体,见下,本镜像故意不装:
|
||
# texlive-xetex + fonts-noto-cjk 会再增数百 MB,主机盘已 89%,
|
||
# 中文 LaTeX 缺 xelatex 时技能按规则明说,不伪造)。
|
||
# - pip:python-docx / openpyxl / python-pptx / PyMuPDF(fitz)/
|
||
# Pillow——技能核查的 Python 库与图片处理(Pillow 有其一即可
|
||
# 做裁剪/缩放/转格式)。图片“生成”仍未配置:本镜像不装、
|
||
# 不接任何生成端点,生成需求技能仍按规则明说无法生成。
|
||
# - --no-cache-dir:pip 不留缓存层,镜像不虚胖。
|
||
RUN apt-get update \
|
||
&& apt-get install -y --no-install-recommends git pandoc poppler-utils latexmk texlive-latex-base \
|
||
&& rm -rf /var/lib/apt/lists/* \
|
||
&& pip install --no-cache-dir python-docx openpyxl python-pptx PyMuPDF Pillow
|
||
ARG CODEX_BIN_DIR=bin
|
||
COPY ${CODEX_BIN_DIR}/codex /usr/local/bin/codex
|
||
COPY ${CODEX_BIN_DIR}/codex-code-mode-host /usr/local/bin/codex-code-mode-host
|
||
# 关键:codex 找 bundled bwrap 只看自身旁边的 codex-resources,
|
||
# 不能放到 /usr/local/lib 下(上一版镜像就是这么丢的,导致
|
||
# 容器内报 bubblewrap is unavailable,工具全失败)。
|
||
# 同时把 bwrap 放进 PATH,双保险。
|
||
COPY ${CODEX_BIN_DIR}/codex-resources /usr/local/bin/codex-resources
|
||
RUN chmod +x /usr/local/bin/codex /usr/local/bin/codex-code-mode-host \
|
||
&& ln -sf /usr/local/bin/codex-resources/bwrap /usr/local/bin/bwrap \
|
||
&& /usr/local/bin/bwrap --version
|
||
WORKDIR /work
|
||
# 无 ENTRYPOINT:DockerExecutor 显式传完整容器内命令
|
||
# (python3 /app/host.py dispatch/run/status ...),镜像只提供环境。
|
||
CMD ["python3", "--version"]
|