【问题标题】:Setup global environnement variables for all Docker containers为所有 Docker 容器设置全局环境变量
【发布时间】:2016-11-21 11:36:32
【问题描述】:

是否可以设置环境。所有未来 Docker 容器的变量?

这将有助于为特定主机设置 http 代理,而无需更改 Docker 映像文件或运行容器的方式(因此相同的 Docker 容器可以在不同的“上下文”上正常运行)。

也许通过/etc/default/docker

【问题讨论】:

    标签: docker systemd


    【解决方案1】:

    Docker compose 使用变量替换,因此您可以在 docker-compose 文件中使用主机变量:

    如果您的 bash 会话定义了一个名为 EXTERNAL_PORT 的变量。

    web:
      build: .
      ports:
        - "${EXTERNAL_PORT}:5000"
    

    检查:https://docs.docker.com/compose/compose-file/#variable-substitution

    如果是代理,我猜如果在当前 shell 会话中定义,则使用 HTTP_PROXY 应该默认重定向流量。

    export http_proxy=http://10.203.0.1:5187/
    export https_proxy=$http_proxy
    export ftp_proxy=$http_proxy
    export rsync_proxy=$http_proxy
    export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
    

    类似的东西应该重定向所有的http流量,你可以从.bashrc设置它。从来没有用 docker 测试过,让我知道它是否有效。

    【讨论】:

    • 我不是在谈论 docker-compose,对不起。
    • @ThomasDecaux 那你应该试试 HTTP_PROXY 与配置代理的 docker 或 docker-compose 无关,它只是一个 linux 环境变量。它还有一个 Windows 对应项。我会创建一个自定义用户来运行配置了所有环境变量的图像。
    【解决方案2】:

    如果你没有像 Marcs 所说的那样使用 docker-compose,那么就没有。

    Dockerfiles 创建二进制文件。 dockerfile(或 docker-compose yaml 或 docker build)中未指定的任何内容都不会进入容器。这是出于许多安全原因以及一般最佳实践,因为人们可能会导致这些容器依赖于主机本身。要么使用 docker-compose 进行构建,要么考虑对主机本身进行更改以影响 docker 容器的该层,例如影响 172 子网的系统范围代理

    【讨论】:

    • Dockerfile 创建镜像,你通过docker run 运行的不是吗?我想自动通过docker run -e K1=V1 ...。所以开发者并不关心代理。
    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2020-10-22
    • 2013-11-10
    • 2017-05-11
    • 1970-01-01
    • 2015-12-07
    • 2011-12-12
    相关资源
    最近更新 更多