【问题标题】:Docker-compose not passing environment variable to containerDocker-compose 未将环境变量传递给容器
【发布时间】:2017-09-18 00:35:17
【问题描述】:

我正在使用 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 变量。默认为空白字符串。 ”。

我做错了什么?我应该怎么做才能将变量传递给容器?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    我找到了解决方案。回答我自己的问题...

    问题出在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)

    【讨论】:

      【解决方案2】:

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

      查看文档

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

      【讨论】:

      • 能否举例说明如何使用ENV从当前终端传递环境变量?
      • 您在 Dockerfile 中使用 ENV,例如 ENV demo_var aabbdd 或其他语法 ENV demo_var=aabbdd
      • 但我不想在 Dockerfile 中设置值。 DEMO_VAR 只是一个示例,但在实际项目中,它可以包含特定于服务器的配置变量,甚至是密码。我想从当前会话(当前终端)传​​递它。
      • “ARG 指令定义了一个用户可以在构建时传递的变量”...但我想在运行时传递一个变量,而不是在构建时传递。顺便说一句:我刚刚找到了解决问题的方法。我将其发布为答案。
      • 在运行时,您有docker run -e 参见文档docs.docker.com/engine/reference/run/#env-environment-variables
      猜你喜欢
      • 2020-02-23
      • 2020-11-07
      • 2015-09-18
      • 1970-01-01
      • 2022-01-16
      • 2021-06-07
      • 2021-11-27
      • 2018-08-23
      相关资源
      最近更新 更多