gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:44:30 25 4
gpt4 key购买 nike

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

我尝试在当前的终端 session 中设置变量并将其传递给容器:
$ 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命令。事实证明,默认情况下它不传递环境变量。有一些可能的解决方案:

  • 使用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(https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo)
  • 的情况下使用docker

    关于docker - Docker-compose不将环境变量传递给容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43535394/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com