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

时间:2016-05-09 08:53:24

标签: docker docker-compose

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

以类似的方式,是否也可以指定需要部署的映像版本?如果不是,在我们需要为图像指定不同版本的情况下,处理这种情况的最佳方法是什么?

对此的任何帮助都会很棒。

3 个答案:

答案 0 :(得分:12)

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 info,

enter image description here

它使用来自ports的{​​{1}}(未覆盖)和来自docker-compose.yml的{​​{1}},因为它会在此处被覆盖。

注意:您有不同的名称和位置,您可以像使用以下命令而不是image一样使用它,

docker-compose.override.yml

编辑2:

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

例如,如果我在两个文件中都有docker-compose -d这是一个数组,它将绑定两个端口,而不是仅仅从覆盖文件中获取端口值,这与docker-compose -f <DOCKER COMPOSE LOCATION> -f <OVERRIDE FILE LOCATION> up -d 部分(非数组)不同

答案 1 :(得分:1)

对于您想做的事情,有(现在?)个更好的选择。从 https://docs.docker.com/compose/environment-variables/

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

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

答案 2 :(得分:-2)

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

  • 搬运工作曲家-master.yml

  • 搬运工作曲家-dev.yml

  • 搬运工作曲家-docker.yml

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

enter image description here