Docker化Python项目编写Dockerfile报错找不到save_model.py问题求助
Dockerfile 错误修正方案
核心错误原因
- Docker 构建时只能读取构建上下文目录(也就是你执行
docker build命令时所在的目录)内的文件,你直接填写本地主机的绝对路径/home/pc/Desktop/yolo4_deep是无效的,构建过程中无法访问这个路径 - 容器内部文件系统与本地主机完全隔离,不需要把容器内的WORKDIR设置成和你本地路径一致,两者没有关联,设置成你本地的路径也找不到对应文件
WORKDIR app是相对路径写法,实际生成的容器内工作目录为/<上一级工作目录>/app,不确定性高,建议用绝对路径/app更稳妥- 路径对应关系错配:你已经把文件复制到工作目录后,CMD 指令不需要再加
./app前缀,要么直接写文件名(相对WORKDIR),要么写绝对路径 - 你本地源码存放在src目录下,复制时需要指定src目录作为源路径,而不是本地主机的绝对路径
修改后的Dockerfile
# syntax=docker/dockerfile:1 FROM tensorflow/serving:2.3.0-rc0-devel-gpu # 明确指定容器内的绝对工作目录 WORKDIR /app # 复制依赖文件到工作目录,源路径为相对于构建上下文的相对路径 # 如果你的依赖文件名是requirements.txt,将下方的requirements-gpu.txt替换即可 COPY requirements-gpu.txt . # 安装依赖 RUN pip install -r requirements-gpu.txt # 把本地src目录下的所有内容复制到容器内的当前工作目录(/app) COPY ./src . # 容器启动命令,直接写相对于WORKDIR的文件名即可 CMD ["python", "save_model.py", "object_tracker.py"]
构建运行注意事项
- 执行
docker build命令的位置必须是Dockerfile所在的目录,此时构建上下文就是该目录,能正确读取到同目录下的依赖文件和src目录 - 如需排查文件是否正常复制到容器内,可执行命令启动容器进入bash查看文件列表:
docker run -it --rm <你的镜像名称> bash,进入容器后执行ls /app即可确认文件是否存在
内容的提问来源于stack exchange,提问作者maryam_hallal
相关产品推荐
相关产品推荐

