Docker Deploy堆栈额外主机被忽略

时间:2018-03-27 11:08:19

标签: docker docker-compose docker-swarm

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也会正确显示撰写文件。

3 个答案:

答案 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"