我的码头组成配置看起来像这样:
搬运工-compose.yml
version: '3.5'
services:
nginx:
ports:
- 80:80
搬运工-compose.prod.yml
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
现在,当我运行命令:8000
时,nginx在主机上公开了两个端口:80
和version: '3.5'
services:
nginx:
ports:
- 8080:8080
- 80:80
,因为它合并了端口属性:
80
有没有办法覆盖它?我想只公开端口dateNow = 2
console.log(dateNow == 1)
console.log(dateNow == 1 || 2)
console.log(true == 0)
console.log(true == 1)
console.log(true == 2)
答案 0 :(得分:5)
此行为记录在https://docs.docker.com/compose/extends/#adding-and-overriding-configuration
对于多值选项
ports
,expose
,external_links
,dns
,dns_search
和tmpfs
,Compose连接两个集合值
由于ports
将是所有撰写文件中端口的串联,我建议创建一个新的docker-compose.dev.yml
文件,其中包含您的开发端口映射,将其从基础{{1文件。
正如Nikson所说,您可以将此docker-compose.yml
命名为自动应用您的开发配置,而无需链接docker-compose文件。如果手动指定其他覆盖文件(例如docker-compose.override.yml
)
docker-compose.override.yml
答案 1 :(得分:0)
使用.override.yml
文件覆盖属性,并且需要重写明确的属性分离
docker-compose.override.yml
前:
version: '3.5'
services:
nginx:
ports:
- 80:80
默认值:
docker-compose up
将使用您的docker-compose.yml
和docker-compose.override.yml
文件
答案 2 :(得分:0)
我遇到了同样的问题。提出的带有docker-compose.override.yml
的解决方案听起来不错,而且还是正式的解决方案。
尽管对于我自己的一些项目,我已经应用erb
模板引擎来使docker-compose.yml.erb
文件针对多种环境进行编译。简而言之,我使用:
COMPOSE_TEMPLATE_ENV=production erb docker-compose.yml.erb > docker-compose.yml
COMPOSE_TEMPLATE_ENV=production erb docker-compose.yml.erb > docker-compose-production.yml
然后,我可以在模板中使用ENV['COMPOSE_TEMPLATE_ENV']
,还可以使用ERB
的语法,因此只需要配置一个文件,而不必担心正确地进行文件配置。 Here's the short post article I've written about it
答案 3 :(得分:0)