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

2023-12-02

我正在使用 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"]

And the docker-start.sh file:

#!/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 变量。默认为空字符串。”。

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


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

问题在于sudo命令。原来是默认不传递环境变量。有一些可能的解决方案:

  1. Use sudo -E. Demo:

    $ export DEMO_VAR=aabbdd
    $ echo $DEMO_VAR
    aabbdd
    $ sudo -E docker-compose up
    env-file-test_1  | DEMO_VAR Var Passed in: aabbdd
    
  2. Use sudo VAR=value:

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

  4. 使用 docker 而不使用 sudo (https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker-compose 未将环境变量传递给容器 的相关文章

随机推荐