Dockerfile复制src文件夹失败,构建时ls命令提示目录为空
问题分析与解决
你的Docker构建报错核心是两个问题:
- 命令顺序颠倒:你在还没复制本地
src文件夹到镜像里的时候,就执行了RUN ls -al ./src/,此时镜像里要么没有src目录,要么是空的,必然报错。 - COPY路径配置错误:原Dockerfile里的
COPY ./src/ .会把本地src文件夹内的所有文件直接复制到镜像的/app根目录下,而不是在镜像中创建/app/src目录,这也会导致你后续查看./src/目录时找不到内容。
修正后的Dockerfile
FROM docker-repo.frontiir.net/container-images/py38-poetry:1.3-slim-bullseye ENV APP_WORKDIR=/app WORKDIR ${APP_WORKDIR} COPY pyproject.toml poetry.lock ./ RUN poetry config virtualenvs.create false \ && poetry install --quiet --no-root --only=main --no-interaction --no-ansi --no-cache # 先把本地src文件夹完整复制到镜像的/app/src目录 COPY ./src/ ./src/ # 现在可以正常查看src目录内容 RUN ls -al ./src/ RUN poetry install --only-root --no-interaction --no-ansi --no-cache CMD ["example", "--version"]
关键调整说明
- 调整COPY命令位置:把复制
src的操作放到RUN ls之前,确保镜像里已经有了src目录和内容后再执行查看命令。 - 修正COPY目标路径:用
COPY ./src/ ./src/替代原来的COPY ./src/ .,这样会在镜像的/app目录下创建src子目录,和本地的目录结构保持一致,后续查看./src/就能看到内容。 - 如果你的实际需求是把
src里的文件直接放到/app根目录下(不需要保留src子目录),可以保留COPY ./src/ .,但要把它移到RUN ls之前,同时把RUN ls -al ./src/改成RUN ls -al ./来验证文件是否复制成功。
内容的提问来源于stack exchange,提问作者Lycan
相关产品推荐
相关产品推荐

