Files

57 lines
3.5 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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"]