docker stack deploy不是关于我的compose文件中的extra_hosts参数。当我做一个简单的docker-compose时,在/ etc / hosts中创建了条目但是当我做docker deploy -compose-file docker-compose.yml myapp它忽略了extra_hosts,任何见解? 下面是docker-compose.xml:
version: '3'
services:
web:
image: user-service
deploy:
labels:
- the label
build:
context: ./
environment:
DATABASE_URL: jdbc:postgresql://dbhost:5432/postgres
ports:
- 9002:9002
extra_hosts:
- "dbhost: ${DB_HOST}"
networks:
- wellness_swarm
env_file:
- .env
networks:
wellness_swarm:
external:
name: wellness_swarm
docker-compose config也会正确显示撰写文件。
答案 0 :(得分:0)
我认为这是一个订购问题。在创建服务定义之前,在YAML处理期间,您在compose文件中获得的${}
变量会运行。然后堆栈部署处理.env文件以在容器中作为envvars运行,但首先需要YAML变量...
要解决这个问题,首先应该使用docker-compose config
命令来处理YAML,然后使用它的输出发送到堆栈部署。
docker-compose config
会显示您可能想要的输出。
然后做一个管道以获得单行。
docker-compose config | docker stack deploy -c - myapp
注意:理想情况下,您不会使用extra_hosts,而是将envvar直接放在连接字符串中。你的方式似乎是不必要的复杂性,并不是我看到创建连接字符串的常用方法。
e.g。
version: '3'
services:
web:
image: user-service
deploy:
labels:
- the label
build:
context: ./
environment:
DATABASE_URL: jdbc:postgresql://${DB_HOST}:5432/postgres
ports:
- 9002:9002
networks:
- wellness_swarm
env_file:
- .env
networks:
wellness_swarm:
external:
name: wellness_swarm
答案 1 :(得分:0)
正如我所看到的https://github.com/moby/moby/issues/29133似乎是设计中compose命令中考虑了.env文件中提到的环境变量但是deploy命令忽略了:(为什么会这样,非常蹩脚的原因!
答案 2 :(得分:0)
这可能不是问题的直接答案,因为它不使用env变量,但是我发现,如果以上述格式输入,则在群体模式下将忽略撰写文件中的extra_hosts块。
即这对我有用,并将条目放在容器的/ etc / hosts中:
extra_hosts:
retisdev: 10.48.161.44
retistesting: 10.48.161.44
以其他格式输入时,在部署为服务时会被忽略
extra_hosts:
- "retisdev=10.48.161.44"
- "retistesting=10.48.161.44"