Jus*_*der 1 docker docker-compose
我正在使用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进行此操作。问题在于该变量未传递到容器。
我的docker-compose.yml文件:
env-file-test:
build: .
dockerfile: Dockerfile
environment:
- DEMO_VAR
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile:
FROM alpine
COPY docker-start.sh /
CMD ["/docker-start.sh"]
Run Code Online (Sandbox Code Playgroud)
和docker-start.sh文件:
#!/bin/sh
echo "DEMO_VAR Var Passed in: $DEMO_VAR"
Run Code Online (Sandbox Code Playgroud)
我尝试在当前的终端会话中设置变量并将其传递给容器:
$ 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
Run Code Online (Sandbox Code Playgroud)
这样就可以看到变量DEMO_VAR为空!
我还尝试像这样在docker-compose.yml中使用变量:DEMO_VAR=${DEMO_VAR}但随后在运行时sudo docker-compose up,出现警告:“警告:未设置DEMO_VAR变量。默认为空白字符串。”。
我究竟做错了什么?我应该怎么做才能将变量传递给容器?
我找到了解决方案。回答我自己的问题...
问题出在sudo命令上。事实证明,默认情况下它不传递环境变量。有一些可能的解决方案:
使用sudo -E。演示:
$ export DEMO_VAR=aabbdd
$ echo $DEMO_VAR
aabbdd
$ sudo -E docker-compose up
env-file-test_1 | DEMO_VAR Var Passed in: aabbdd
Run Code Online (Sandbox Code Playgroud)用途sudo VAR=value:
sudo DEMO_VAR=$DEMO_VAR docker-compose up
Run Code Online (Sandbox Code Playgroud)将环境变量添加到sudoers文件(/sf/answers/604569801/)
使用不带sudo的docker(https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo)
| 归档时间: |
|
| 查看次数: |
2344 次 |
| 最近记录: |