docker撰写变量替换

时间:2015-12-22 01:17:35

标签: docker docker-compose

似乎我在下一页中没有理解变量替换(我的变量NUM未注册):https://docs.docker.com/compose/compose-file/#variable-substitution

见下面的截图。在mac OSX上运行。

docker-compose up

3 个答案:

答案 0 :(得分:4)

关于docker-compose variable substitution,它可能取决于NUM的设置方式 set NUM=5只会在当前shell中设置它,而不是在另一个进程中设置它 确保输入:

export NUM=5

答案 1 :(得分:1)

docs中提到:

  

当您的配置需要时,您可以使用$$(双美元符号)   字面的美元符号。这也可以防止Compose插入a   值,所以$$允许你引用你的环境变量   不希望由Compose处理。

web:
  build: .
  command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
     

如果您忘记并使用单个美元符号($),Compose会解释   值作为环境变量并将警告您:

     

未设置VAR_NOT_INTERPOLATED_BY_COMPOSE。替换空   字符串。

根据这一点,你的撰写文件的第03行应该是:

command: echo $$NUM

答案 2 :(得分:1)

除了上面提供的@ ayman-nedjmeddine提供的$$解决方案之外,你还需要做以下几点,为了使shell变量可用,你有两个选择

选项1

  • 以root身份登录,设置变量并执行docker-compose
  • root>导出NUM = 5
  • root> docker-compose up

选项2

  • 从用户shell使用sudo -E-E会将用户shell env传播到sudo,
  • 提供对docker / docker-compose
  • 的sudo访问权限
  • :SETENV:添加到sudoer文件中的命令,以便在sudo中使用-E选项
  • 例如:

    sudo visudo -f /etc/sudoers.d/docker-compose
        ALL   ALL=(ALL:ALL) NOPASSWD:SETENV: /usr/local/bin/docker-compose
    sudo visudo -f /etc/sudoers.d/docker
        ALL   ALL=(ALL:ALL) NOPASSWD:SETENV: /usr/bin/docker
    
  • 最后使用

    user1>export NUM=5
    user1>sudo -E docker-compose up