我正在使用Docker 17.04.0-ce,使用Docker compose 1.12.0构建4845c56,在Ubuntu 16.04.2 LTS上构建b31ff33。我只想传递一个环境变量,并从容器中运行的脚本中显示它。我是根据文件https://docs.docker.com/compose/compose-file/#environment这样做的。问题是变量没有传递到容器
My docker-compose.yml文件:
env-file-test:
build: .
dockerfile: Dockerfile
environment:
- DEMO_VAR
我的Dockerfile:
FROM alpine
COPY docker-start.sh /
CMD ["/docker-start.sh"]
以及docker-start.sh
文件:
#!/bin/sh
echo "DEMO_VAR Var Passed in: $DEMO_VAR"
我尝试在当前终端会话中设置变量并将其传递给容器:
$ export DEMO_VAR=aabbdd
$ echo $DEMO_VAR
aabbdd
$ sudo docker-compose up
Starting envfiletest_env-file-test_1
Attaching to envfiletest_env-file-test_1
env-file-test_1 | DEMO_VAR Var Passed in:
envfiletest_env-file-test_1 exited with code 0
因此,您可以看到变量DEMO_VAR为空
我还尝试在docker-compose.yml中使用变量,如下所示:DEMO_VAR=${DEMO_VAR}
但是当我运行sudo docker-compose up
时,我得到一个警告:“警告:未设置DEMO_VAR变量。默认为空字符串。”
我做错了什么?我应该如何将变量传递给容器
您应该在Dockerfile中使用
ENV
,并避免导出见医生
https://docs.docker.com/engine/reference/builder/#env
我找到了解决办法。回答我自己的问题
问题在于
sudo
命令。事实证明,默认情况下它不会传递环境变量。有一些可能的解决方案:使用
sudo -E
。演示:使用
sudo VAR=value
:将环境变量添加到sudoers文件(https://stackoverflow.com/a/8636711)
使用不带sudo的docker(https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo)
相关问题 更多 >
编程相关推荐