![](/img/trans.png)
[英]Docker-compose not passing environment variables to docker container
[英]Docker-compose not passing environment variable to container
我正在使用 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
我的 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=${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
使用sudo VAR=value
:
sudo DEMO_VAR=$DEMO_VAR docker-compose up
将环境变量添加到 sudoers 文件 ( https://stackoverflow.com/a/8636711 )
在没有 sudo 的情况下使用 docker ( https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.