docker-compose构建镜像报错[Errno 2] No such file or directory问题咨询
问题根因
Docker构建时的上下文(context) 配置不匹配是报错的核心原因:
- 在GUI目录直接执行
docker build时,默认上下文是当前GUI目录,Dockerfile里的COPY . .会把GUI下的dockerfile、gui.py都复制到镜像内的/app目录,运行时能找到gui.py所以正常。 - 在docker-compose.yml里配置的build上下文是项目根目录(
context: .),此时Dockerfile里的COPY . .会把根目录的所有内容(只有docker-compose.yml和GUI文件夹)复制到镜像/app目录,gui.py实际在/app/GUI/gui.py路径下,启动执行python gui.py时找不到对应文件,就抛出了文件不存在的错误。
解决方案
两种可选方案,任选其一即可:
方案1:调整docker-compose的构建上下文
修改docker-compose.yml的build配置,将上下文指定为GUI目录,和本地直接build的逻辑完全一致:
version: "3" services: service_gui: build: context: ./GUI dockerfile: dockerfile ports: - 8080:8080
方案2:修改Dockerfile的复制路径
如果保留根目录作为构建上下文,只需要修改GUI目录下Dockerfile的COPY指令,明确指定复制GUI目录的内容:
FROM continuumio/miniconda3 WORKDIR /app # 从构建上下文(根目录)下的GUI目录复制所有内容到/app COPY ./GUI/ . RUN pip install dash EXPOSE 8080 ENTRYPOINT [ "python","gui.py"]
验证方法
修改完成后重新执行docker-compose build,构建完成后可以执行以下命令查看镜像内/app目录的文件,确认gui.py存在即可:docker run --rm <构建出的镜像名> ls /app
内容的提问来源于stack exchange,提问作者OzerT
相关产品推荐
相关产品推荐

