繁体   English   中英

Docker-compose 不将环境变量传递给容器

[英]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命令上。 原来它默认不传递环境变量。 有一些可能的解决方案:

  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. 将环境变量添加到 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM