docker-compose跨目录构建服务时COPY文件路径错误如何解决
问题原因
你遇到的路径问题核心是docker-compose配置中相对路径的解析规则和直接执行docker build有差异:
- docker compose中,
build.context的相对路径是相对于docker-compose.yaml文件所在的目录解析的 build.dockerfile的相对路径是相对于你设置的build.context路径解析的- Linux环境下文件名大小写敏感,需注意Dockerfile的实际命名和配置中的写法一致
正确配置
你之前执行的docker build命令可以正常工作,对应等价的docker-compose.yaml配置如下:
version: "3.9" services: admin: # 指定镜像名,和你之前手动build的名称保持一致 image: feendi/Service1 build: # 构建上下文路径,相对于yaml所在目录(Project/Docker/Service1),对应到Project/Service1 context: ../../Service1 # Dockerfile路径,相对于上面设置的context(也就是Project/Service1目录),如果你的Dockerfile实际命名是大写F的DockerFile,这里也要对应修改 dockerfile: Dockerfile # 补充你需要的其他配置,比如端口映射、挂载卷等 ports: - "80:80"
操作方法
配置修改完成后,在Project/Docker/Service1目录执行以下命令即可自动构建并启动服务:
docker compose up -d --build
加上--build参数会强制检查镜像是否需要更新,镜像不存在时自动构建。
排查方法
如果配置后仍有问题,可以用以下命令定位问题:
- 执行
docker compose config,查看解析后的完整配置,确认context和dockerfile的路径是否符合预期 - 执行
docker compose build --no-cache --progress=plain admin,查看构建过程的详细日志,确认构建上下文加载的路径、COPY的文件列表是否正确
内容的提问来源于stack exchange,提问作者Notbad
相关产品推荐
相关产品推荐

