覆盖 docker-compose 文件中的图像版本

Overriding image version in docker-compose file

我正在使用 docker-compose.override.yml 覆盖默认 docker-compose.yml 文件,如此 link 所示,我可以指定 portsvolumes 在覆盖文件中。

同理,是否也可以指定需要部署的镜像版本?如果不是,处理这种需要为图像指定不同版本的情况的最佳方法是什么?

任何帮助都将非常有用。

Docker 已经具备该功能。我尝试用简单的 docker-compose 覆盖图像名称,它正在工作。

例如,

docker-compose.yml有内容,

my-httpd:
  image: httpd:latest
  ports:
    - "1110:80"  

docker-compose.override.yml内容,

my-httpd:
  image: httpd:2.4

执行docker-compose -d后,这里是docker ps信息,

它使用 docker-compose.yml 中的 ports(未覆盖)和 docker-compose.override.yml 中的 image,因为它在这里被覆盖了。

注意:如果你有不同的名称和位置,你可以像下面的命令一样使用它而不是docker-compose -d

docker-compose -f <DOCKER COMPOSE LOCATION> -f <OVERRIDE FILE LOCATION> up -d

编辑 2:

上述方式覆盖只会替换非数组值,数组变量会被合并。

例如,如果我在两个文件中都有 ports,这是一个数组,它将绑定两个端口,而不是仅从覆盖文件中获取端口值,这与 image 部分不同(非数组).

例如你需要有 3 个版本的 docker:

  • docker-作曲家-master.yml

  • docker-作曲家-dev.yml

  • docker-作曲家-docker.yml

您可以创建3个文件docker-composer并添加内容如下图

有(现在?)一个更好的选择来完成你想做的事情。从 https://docs.docker.com/compose/environment-variables/

可以在 shell 中使用环境变量来填充 Compose 文件中的值:

web:
  image: "webapp:${TAG}"