docker-compose:不支持双花括号语法

时间:2018-04-16 17:21:25

标签: docker docker-compose

搬运工-compose.yml

version: "3"
services:
  mycentos:
    image: mycentos
    container_name: '{{.Node.Hostname}}-rh7'
    hostname: '{{.Node.Hostname}}-rh7'
    env_file:
        - docker_run.env
    privileged: true
    cap_add:
        - SYS_PTRACE
        - SYS_ADMIN
    networks:
      - testnet
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure

networks:
  testnet:

运行docker-compose会给我这个错误:

ERROR: for mycentos-rh7  Cannot create container for service mycentos-rh7: Invalid container name ({{.Node.Hostname}}-rh7), only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed

PS我可以通过" docker stack deploy"运行上面的compose文件而不会出错。所以问题似乎已经本地化为docker-compose

想要使用docker-compose而不是docker stack deploy的原因是测试容器更容易,因为它们留在localhost并且我可以获取contianer id来执行

2 个答案:

答案 0 :(得分:0)

docker-compose variable substitution功能不是很强大,在您的上下文中没有类似{{.Node.Hostname}}的内容,但您可以覆盖其他文件中的值:

<强>搬运工-compose.override.yaml

version: "3"
services:
  mycentos:
    container_name: '${HOSTNAME}-rh7'
    hostname: '${HOSTNAME}-rh7'

需要在启动期间设置环境变量HOSTNAME

HOSTNAME=$(hostname) docker-compose -f docker-compose.yaml -f docker-compose.override.yaml up -d

这适用于您的用例。

答案 1 :(得分:0)

container_name不支持使用模板。来自official文档:

  

您可以使用模板为某些服务标志创建,使用   Go的文本/模板包提供的语法。支持的标志   如下:

     

- 主机名

     

- 安装

     

- ENV

  

PS我可以通过“docker stack”运行上面的compose文件而不会出错   部署“所以问题似乎已本地化为docker-compose

这是因为container_name指令是ignored in that case

  

注意:在群集模式下部署堆栈时,将忽略此选项   a(版本3)撰写文件。