覆盖 docker-compose 文件中的图像版本
Overriding image version in docker-compose file
我正在使用 docker-compose.override.yml
覆盖默认 docker-compose.yml
文件,如此 link 所示,我可以指定 ports
和 volumes
在覆盖文件中。
同理,是否也可以指定需要部署的镜像版本?如果不是,处理这种需要为图像指定不同版本的情况的最佳方法是什么?
任何帮助都将非常有用。
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}"
我正在使用 docker-compose.override.yml
覆盖默认 docker-compose.yml
文件,如此 link 所示,我可以指定 ports
和 volumes
在覆盖文件中。
同理,是否也可以指定需要部署的镜像版本?如果不是,处理这种需要为图像指定不同版本的情况的最佳方法是什么?
任何帮助都将非常有用。
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}"