似乎我在下一页中没有理解变量替换(我的变量NUM
未注册):https://docs.docker.com/compose/compose-file/#variable-substitution
见下面的截图。在mac OSX上运行。
答案 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
选项2
sudo -E
,-E
会将用户shell env传播到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