You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
683 B
24 lines
683 B
# EMWeb API 生产镜像
|
|
# 基于 python:3.13-slim (与本地 uv 锁定的 CPython 3.13.14 一致)
|
|
FROM python:3.13-slim
|
|
|
|
# 安装 uv (项目用 uv 管理依赖)
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
|
|
|
WORKDIR /app
|
|
|
|
ENV UV_LINK_MODE=copy \
|
|
UV_COMPILE_BYTECODE=1
|
|
|
|
# 先拷贝依赖清单, 利用 Docker 层缓存加速重建
|
|
COPY pyproject.toml uv.lock ./
|
|
# 只装生产依赖, 不装项目自身 (无 build-system, 跳过避免报错)
|
|
RUN uv sync --frozen --no-dev --no-install-project
|
|
|
|
# 拷贝源码
|
|
COPY . .
|
|
|
|
EXPOSE 8765
|
|
|
|
# 直接用 venv 里的 uvicorn 启动 (不再触发 uv sync)
|
|
CMD [".venv/bin/uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8765"]
|
|
|