Files
opencode-build/Dockerfile
T
2026-06-18 14:02:27 +08:00

64 lines
2.6 KiB
Docker

# ==========================================
# 阶段 1: 构建阶段 (Builder)
# ==========================================
FROM ubuntu:22.04 AS builder
ENV DEBIAN_FRONTEND=noninteractive
# 安装基础依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
ca-certificates \
gnupg \
&& rm -rf /var/lib/apt/lists/*
# 安装 Node.js 22
RUN mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \
&& apt-get update && apt-get install -y nodejs --no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
# 安装 uv 并利用 uv 下载 Python 3.11
ENV UV_INSTALL_DIR=/opt/uv
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
&& /opt/uv/uv python install 3.11
# ==========================================
# 阶段 2: 最终运行阶段 (Final)
# ==========================================
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
# 1. 干净地为最终镜像配置 Node.js 22 环境
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
ca-certificates \
gnupg \
&& mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \
&& apt-get update && apt-get install -y nodejs --no-install-recommends \
&& apt-get purge -y curl gnupg \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*
# 2. 从 builder 复制 uv 和由 uv 管理的 Python 3.11
COPY --from=builder /opt/uv/uv /usr/local/bin/uv
COPY --from=builder /root/.local/share/uv/python /root/.local/share/uv/python
# 3. 核心修复:在最终镜像中用正规的 npm 安装 opencode-ai,确保系统全局软链接生成完整
RUN npm install -g opencode-ai && npm cache clean --force
# 4. 精准寻找 uv 的 Python 路径并建立全局 python / python3 软链接(消除通配符失败隐患)
RUN UV_PYTHON_BIN=$(ls /root/.local/share/uv/python/cpython-3.11.*/bin/python3 | head -n 1) \
&& ln -s "$UV_PYTHON_BIN" /usr/local/bin/python3 \
&& ln -s /usr/local/bin/python3 /usr/local/bin/python
# 5. 验证成果
RUN opencode --version && uv --version && python3 --version
ENTRYPOINT ["opencode"]