gpt4 book ai didi

docker - 环境变量不会从 docker-compose 进入容器

转载 作者:行者123 更新时间:2023-12-02 00:52:33 31 4
gpt4 key购买 nike

我试图将 ENV_VAR 传递给容器,但没有成功。

version: '3.7'

services:

ubuntu:
image: ubuntu:latest
environment:
- ENV_VAR=teste
command: "echo ${ENV_VAR}"

使用 $$ 而不是 $ 解决了这个问题:

version: '3.7'

services:

ubuntu:
image: ubuntu:latest
environment:
- ENV_VAR=teste
command: '/bin/sh -c "echo $$ENV_VAR"'

但是,我不明白为什么我必须调用 sh 并且我不相信我的图像中正在运行的应用程序能够读取这个值。

最佳答案

在运行时在你的容器中有一个变量和在启动时在你的docker-compose.yml中有这个变量是不同的事情. Compose 无法用文件的 environment 部分中的变量替换配置文件中某处的变量——您正试图在 command 部分中执行此操作,但您必须使用 an .env file 来使这项工作。

或者,就像您所做的那样,使用 $$ 语法来阻止 Compose 到 evaluate a variable ,但让它在容器中执行调用的 Shell。

不过,environment 部分中的变量可用于容器。你可以用这个最小的例子来检查它:

  • docker-compose.yml
version: "3.7"

services:
foo:
image: ubuntu
container_name: ubuntu
environment:
- foo=bar
command: sleep 3
nico@tuxedo:~/StackOverflow$ docker-compose up -d && docker exec ubuntu /bin/sh -c "env | grep foo"
Starting ubuntu ... done
foo=bar

因此容器内的应用程序获取此变量应该没有问题。

至于为什么 command: echo $$foo 不起作用,我不太确定。我相信,如果你使用 echo 作为 ENTRYPOINT (因为没有其他 ENTRYPOINT 定义 in the Dockerfile ),那么当你启动时没有 Shell容器,因为您覆盖了默认的 /bin/bashecho 本身似乎无法在没有 Shell“包裹”时从环境中读取变量。虽然变量很明显(使用 commmand: envdocker-compose up 检查),echo 不知道如何获取它们.

如果有人对此有很好的解释,我很乐意阅读。 :)

关于docker - 环境变量不会从 docker-compose 进入容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56479896/

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