具有相同映像的两个服务应该使用不同的dockerfile



我试图用相同的图像构建两个服务,但两个不同的Dockerfile。然而,Docker将始终只使用一个Dockerfile用于这两个文件,即使已经定义了两个:

version: '3.4'
services:
serviceA: 
image: myimage 
build:
dockerfile: ./Dockerfile
context: ${project.basedir}/${project.artifactId}-docker/target
depends_on:
- serviceB 
serviceB: 
image: myimage
build:
dockerfile: ./Dockerfile-cloud
context: ${project.basedir}/${project.artifactId}-docker/target

尽管我也写了dependsOn, running

docker-compose up -f docker-compose.yml

它只使用Dockerfile-cloud。

我猜你的问题是你的图像标记为myimage(默认使用最新)。所以docker会用Dockerfile构建第一个版本的myimage,然后用Dockerfile-cloud构建另一个版本的myimage,最后它只会使用最新的版本。这就是为什么它会同时使用Dockerfile-cloud。要修复它,请删除image: myimage或执行以下操作:

serviceA: 
image: myimage:serviceA
...
serviceB: 
image: myimage:serviceB

因为你是从不同的Dockerfiles构建两个容器的图像,它们不能真正是相同的图像;它们将有不同的内容和元数据。

Compose能够为它生成的各种东西分配唯一的名称。除非您需要将docker-compose push构建的映像添加到注册表中,否则通常可以省略image:行。这两个容器将使用从它们自己的dockerfile构建的独立映像,并且由composer分配的名称将避免您在这里遇到的歧义。

version: '3.8'
services:
serviceA:
# no image:
# short form of build: with default dockerfile: and no args:
build: ${project.basedir}/${project.artifactId}-docker/target
depends_on:
- serviceB 
serviceB:
# no image:
build:
context: ${project.basedir}/${project.artifactId}-docker/target
dockerfile: ./Dockerfile-cloud

相关内容

  • 没有找到相关文章

最新更新