Docker-compose不把环境variables传递给容器

我使用Docker 17.04.0-ce,使用docker-compose 1.12.0构build4845c56,在Ubuntu 16.04.2 LTS上构buildb31ff33。 我只是想传递一个环境variables,并从运行在容器中的脚本显示它。 我正在做这个根据文档https://docs.docker.com/compose/compose-file/#environment 。 问题是该variables不传递给容器。

我的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" 

我尝试在我当前的terminal会话中设置variables并将其传递给容器:

 $ 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 

所以你可以看到variablesDEMO_VAR是空的!

我也尝试在docker-compose.yml中使用这样的variables: DEMO_VAR=${DEMO_VAR}但是当我运行sudo docker-compose up DEMO_VAR=${DEMO_VAR} sudo docker-compose up ,我得到一个警告:“警告:DEMO_VARvariables没有设置,默认为空串。”。

我究竟做错了什么? 我应该怎么做把variables传递给容器?

我find了解决scheme。 回答我自己的问题

问题是与sudo命令。 事实certificate,它不会默认传递环境variables。 有一些可能的解决scheme:

  1. 使用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 
  2. 使用sudo VAR=value

     sudo DEMO_VAR=$DEMO_VAR docker-compose up 
  3. 将环境variables添加到sudoers文件( https://stackoverflow.com/a/8636711

  4. 使用没有sudo的docker( https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo

你应该在你的Dockerfile中使用ENV ,并避免导出。

看文档

https://docs.docker.com/engine/reference/builder/#env