加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

环境变量不会从docker-compose转到容器

发布时间:2020-12-16 03:22:11 所属栏目:安全 来源:网络整理
导读:我试图将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 environ

我试图将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不能用配置文件环境部分中的变量替换配置文件中的变量,而您要在命令部分中尝试这样做,但是您必须使用an .env file才能完成此工作.

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

但是,环境部分中的变量可用于容器.您可以通过以下最小示例进行检查:

> 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

因此,容器内的应用程序应该没有任何问题来获取此变量.

至于到底为什么命令:echo $$foo不起作用,我不确定.我相信,如果将echo用作ENTRYPOINT(因为没有其他定义的ENTRYPOINT in the Dockerfile),那么启动容器时就没有Shell,因为您覆盖了默认的/ bin / bash.当没有Shell被“包装”时,echo本身似乎无法从环境中读取变量.尽管变量显然存在(使用commmand进行检查:env和docker-compose up),但是echo不知道如何获取它们.

如果有人对此有很好的解释,我很高兴阅读它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读