Docker-compose中同名镜像服务指定不同Dockerfile却仅生效一个
问题原因与解决办法
问题原因
- 当两个Docker Compose服务指定完全相同的
image名称时,Compose会将它们认定为同一个镜像资源。 - 结合
depends_on的配置,serviceB会优先启动并构建镜像,生成名为myimage的镜像后,serviceA启动时会直接复用已存在的这个镜像,不会再执行自身配置的Dockerfile构建流程。
解决办法
方案1:为镜像添加不同标签(推荐)
给两个服务的镜像设置带不同标签的名称,让Compose识别为独立镜像,分别执行各自的构建逻辑:
version: '3.4' services: serviceA: image: myimage:serviceA build: dockerfile: ./Dockerfile context: ${project.basedir}/${project.artifactId}-docker/target depends_on: - serviceB serviceB: image: myimage:serviceB build: dockerfile: ./Dockerfile-cloud context: ${project.basedir}/${project.artifactId}-docker/target
方案2:移除image字段
如果不需要自定义镜像名称,可以直接去掉image配置,让Docker Compose自动生成唯一的镜像名称,这样也能触发各自的构建:
version: '3.4' services: serviceA: build: dockerfile: ./Dockerfile context: ${project.basedir}/${project.artifactId}-docker/target depends_on: - serviceB serviceB: build: dockerfile: ./Dockerfile-cloud context: ${project.basedir}/${project.artifactId}-docker/target
内容的提问来源于stack exchange,提问作者user5417542
相关产品推荐
相关产品推荐

