如何在多个组合文件中覆盖docker compose值?
假设我有3个组合文件(只关注mysql服务) docker-compose.yml docker-compose.staging.yml docker-compose.prod.yml 在我的docker compose.yml中,我有我的基本mysql内容和开发人员构建目标如何在多个组合文件中覆盖docker compose值?,docker,docker-compose,yaml,dockerfile,Docker,Docker Compose,Yaml,Dockerfile,假设我有3个组合文件(只关注mysql服务) docker-compose.yml docker-compose.staging.yml docker-compose.prod.yml 在我的docker compose.yml中,我有我的基本mysql内容和开发人员构建目标 version: "3.4" services: mysql: build: target: dev ... 首先是 docker compose up-d 在我的登台
version: "3.4"
services:
mysql:
build:
target: dev
...
首先是
docker compose up-d
在我的登台环境中,我想公开端口3306,但还需要另一个构建目标,以便使用以下内容创建docker-compose.staging.yml
version: "3.4"
services:
mysql:
build
target: prod
ports:
- 3306:3306
并将其与
docker compose-f docker-compose.yml-f docker-compose.staging.yml up-d
因此,构建目标被覆盖,端口3306现在暴露于外部
现在我想在docker-compose.prod.yml中使用相同的端口,只是不让端口3306暴露在外部。。。如何覆盖ports指令,使其不暴露端口
我试图在prod.yml中放入一个空数组,但没有成功(端口仍然公开):
最后,我想将up命令堆叠如下:
mysql:
extends:
file: docker-compose.yml
service: mysql
ports:
- 3306:3306
# other definitions
docker compose-f docker-compose.yml-f docker-compose.staging.yml-f docker-compose.prod.yml up-d
我也知道医生说
对于多值选项端口,expose、external_links、dns、dns_search和tmpfs,Compose连接这两组值
但我如何在不重复配置的情况下实现目标呢
当然可以,我可以省略docker-compose.staging.yml,但是在staging.yml中定义了构建步骤,这也应该用于prod阶段,以使构建的容器之间没有任何差异。
所以复制东西并不是一个真正的选择
谢谢你可以考虑在这样的撰写文件中使用<代码>扩展< /代码>键:
mysql:
extends:
file: docker-compose.yml
service: mysql
ports:
- 3306:3306
# other definitions
尽管您必须将compose版本从3.4
更改为3
(如2.3
),因为v3不支持此功能,因为有一个打开的功能请求挂起很长时间
重要注意事项这里是,您不应该公开基本docker compose.yml
文件中的任何端口,只在特定的组件上
编辑
target
子句在v2.0
中不受支持,因此我已经调整了答案,以匹配extends
和target
要求。这就是composev2.3
根据评论编辑
由于存在
deploy
关键字需求,因此存在compose v3
需求。至于现在,不可能扩展composes。我在一些官方文件中读到(现在找不到供参考)他们鼓励我们使用特定于环境的平面组合,以便始终清晰。Docker还表示,这很难在v3中实现(参考上述问题),而且不会很快在任何地方实现。每个环境必须使用单独的组合文件 > P>你可以考虑在这样的撰写文件中使用<代码>扩展< /Cord>键:< /P>
mysql:
extends:
file: docker-compose.yml
service: mysql
ports:
- 3306:3306
# other definitions
尽管您必须将compose版本从3.4
更改为3
(如2.3
),因为v3不支持此功能,因为有一个打开的功能请求挂起很长时间
重要注意事项这里是,您不应该公开基本docker compose.yml
文件中的任何端口,只在特定的组件上
编辑
target
子句在v2.0
中不受支持,因此我已经调整了答案,以匹配extends
和target
要求。这就是composev2.3
根据评论编辑
由于存在
deploy
关键字需求,因此存在compose v3
需求。至于现在,不可能扩展composes。我在一些官方文件中读到(现在找不到供参考)他们鼓励我们使用特定于环境的平面组合,以便始终清晰。Docker还表示,这很难在v3中实现(参考上述问题),而且不会很快在任何地方实现。每个环境必须使用单独的组合文件 实际上,我强烈建议不要在撰写文件中使用“target”命令。我发现为本地/登台/生产构建一个映像非常有益——构建一次,测试它,并在每个环境中部署它。在这种情况下,您可以使用环境变量或挂载的secrets/config文件更改内容
此外,使用compose构建图像是。。。易碎的我建议在CI系统中构建图像,将它们推送到注册表,然后在您的撰写文件中使用图像版本标记-这是一个更具可复制性的系统。我实际上强烈建议不要在撰写文件中使用“target”命令。我发现为本地/登台/生产构建一个映像非常有益——构建一次,测试它,并在每个环境中部署它。在这种情况下,您可以使用环境变量或挂载的secrets/config文件更改内容
此外,使用compose构建图像是。。。易碎的我建议在CI系统中构建图像,将它们推送到注册表,然后在您的compose文件中使用图像版本标记-这是一个更可复制的系统。我以前使用docker compose<3,但这里似乎不支持“target”指令:/哦,我误解了。。。他们为目标指令“在3.4中添加”而编写,所以我认为只有3.4和以上。。。但在2.xdoc版本中,他们说“添加到2.3中”。。。所以我会试试看,很抱歉我在发布之前没有检查,我也刚刚发现了,试试
2.3
。将调整我的答案。好的,我已经看到了,我们也在使用“deploy”指令,所以