Docker构建未复制文件?Azure Web Apps部署Python应用遇文件缺失
我尝试部署一个基于Python的Web应用,用于Excel文件的可视化界面。本地构建并运行容器一切正常,但部署到Azure Web Apps时,出现"dataset.csv"文件缺失的错误。
我的Dockerfile内容如下:
FROM python:3.8-slim-buster AS base WORKDIR /home/mydashboard RUN python -m pip install --upgrade pip RUN pip3 install pipenv COPY Pipfile /home/mydashboard/Pipfile COPY Pipfile.lock /home/mydashboard/Pipfile.lock COPY dataset.csv /home/mydashboard/dataset.csv COPY src/ /home/mydashboard/src RUN pipenv install --system WORKDIR /home/mydashboard/src EXPOSE 8000 CMD gunicorn -b :8000 dashboard_app.main:server
奇怪的是,在Azure App Service运行时提示"dataset.csv不存在",我查看/home/dashboard/目录发现它是空的!为什么会出现这种情况?该应用在本地运行完全正常,仅在Azure上出现问题。
1. 路径混淆问题
你查看的/home/dashboard并非Dockerfile中设置的工作目录,Dockerfile里的核心目录是/home/mydashboard,先确认是否查看了错误路径:
- 登录Azure App Service的容器终端,执行命令检查文件实际位置:
ls /home/mydashboard
如果dataset.csv存在,说明代码中读取文件的路径写错了(比如硬编码成了/home/dashboard/dataset.csv),需要修改代码路径为/home/mydashboard/dataset.csv,或者在src目录下用相对路径../dataset.csv读取。
2. 构建上下文缺失文件
如果/home/mydashboard下也没有dataset.csv,大概率是远程构建镜像时文件未被正确复制:
- 检查构建镜像的源码上下文(如GitHub仓库、Azure DevOps流水线目录)是否包含
dataset.csv,若.gitignore或构建配置排除了该文件,会导致COPY步骤失效。 - 本地构建正常是因为本地目录包含该文件,但远程构建时文件不在上下文范围内,需确保
dataset.csv被包含在构建源码中。
3. 存储卷挂载覆盖文件
若你为Azure App Service配置了持久化存储(如Azure Files),且挂载路径设置为/home/mydashboard,镜像中原有的文件会被存储卷覆盖:
- 进入App Service的「配置」->「路径映射」,检查是否有存储卷挂载到
/home/mydashboard目录。若有,要么取消该挂载,要么将dataset.csv上传到对应的Azure存储容器中。
4. 验证镜像内容
可以在本地验证镜像是否包含目标文件,确认问题是否出在远程构建环节:
# 本地构建镜像 docker build -t mydashboard . # 运行临时容器检查文件 docker run --rm mydashboard ls /home/mydashboard
如果本地镜像中存在dataset.csv,说明远程构建过程有异常,需查看Azure的构建日志,检查COPY步骤是否有报错。
内容的提问来源于stack exchange,提问作者Eduard6421

