在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
相关产品推荐
相关产品推荐

