Dockerfile未从docker-compose指定上下文目录复制内容问题排查
问题原因与解决方案
核心问题
你遇到的问题是容器启动时的挂载操作覆盖了镜像中已有的代码。
在你的docker-compose.yaml里,volumes字段配置的是:
volumes: - .:/app
这里的.是相对路径,指向的是docker-compose.yaml所在的service-orchestration目录,启动容器时,这个目录会被挂载到容器内的/app路径,直接覆盖了镜像构建时从service-one复制进去的所有代码,所以你看到的是service-orchestration的内容。
解决方案
根据你的需求,有两种处理方式:
方式1:保留代码热重载(适合开发环境)
修改volumes配置,将本地的service-one目录挂载到容器的/app:
volumes: - ../service-one:/app
这样挂载的路径和构建上下文一致,容器内的/app会同步本地service-one的代码,同时保留镜像中已安装的依赖,也能配合--reload实现代码修改后自动重启服务。
方式2:使用镜像内的代码(适合生产环境)
如果不需要本地代码热重载,直接删除volumes字段即可。容器会使用镜像构建时通过COPY ./ /app/复制进去的service-one代码,不会被本地目录覆盖。
验证方法
修改配置后,可进入容器验证内容:
docker-compose exec service-one ls /app
此时应该能看到service-one目录下的所有文件,比如requirements.txt、service-one应用目录等。
内容的提问来源于stack exchange,提问作者David Sigley
相关产品推荐
相关产品推荐

