You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure ML环境中配置含Poetry的Docker环境时遇文件缺失错误求助

问题描述

我是Docker和venv的新手,正在Azure ML中创建一个安装了Poetry的环境。编写的Dockerfile代码如下:

FROM mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
RUN pip install azureml-mlflow
FROM python:3.11-alpine as base

ARG DEV=false
ENV VIRTUAL_ENV=/app/.venv \
    PATH="/app/.venv/bin:$PATH"

RUN apk update && \
    apk add libpq


FROM base as builder

ENV POETRY_NO_INTERACTION=1 \
    POETRY_VIRTUALENVS_IN_PROJECT=1 \
    POETRY_VIRTUALENVS_CREATE=1 \
    POETRY_CACHE_DIR=/tmp/poetry_cache

RUN apk update && \
    apk add musl-dev build-base gcc gfortran openblas-dev

WORKDIR /app

# Install Poetry
RUN pip install poetry==1.6.1

# Install the app
COPY pyproject.toml poetry.lock ./
RUN if [ $DEV ]; then \
      poetry install --with dev --no-root && rm -rf $POETRY_CACHE_DIR; \
    else \
      poetry install --without dev --no-root && rm -rf $POETRY_CACHE_DIR; \
    fi


FROM base as runtime

COPY --from=builder ${VIRTUAL_ENV} ${VIRTUAL_ENV}

COPY src ./src

WORKDIR /app/src

ENTRYPOINT ["python", "-m", "app.main"]

构建时出现错误:

2024-12-05T21:11:06: COPY failed: file not found in build context or excluded by .dockerignore: stat pyproject.toml: file does not exist

尚未向Azure ML的任何文件夹上传文件,请问哪里操作出错了?


解决方法
  • 核心问题:Docker构建依赖「构建上下文」,你需要把pyproject.toml、poetry.lock以及src目录这些文件放在构建上下文里。目前你没上传这些文件到Azure ML的对应目录,Docker找不到目标文件才报错。
  • 步骤1:整理本地文件结构
    确保本地文件层级和Dockerfile匹配,所有需要的文件和Dockerfile放在同一目录下:
    ./
    ├── Dockerfile
    ├── pyproject.toml
    ├── poetry.lock
    └── src/
        └── app/
            └── main.py
    
  • 步骤2:上传文件到Azure ML
    将上述所有文件和目录,上传到Azure ML环境构建对应的工作文件夹(即你创建环境时指定的代码目录)。Azure ML会把这个文件夹作为Docker构建上下文,此时COPY指令就能找到需要的文件。
  • 额外检查:如果存在.dockerignore文件,确认其中没有排除pyproject.toml、poetry.lock或src目录;如果没有这个文件,无需额外操作。

内容的提问来源于stack exchange,提问作者Ameya Bhave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:02:45