【问题标题】:Docker Ubuntu environment variablesDocker Ubuntu 环境变量
【发布时间】:2017-10-16 07:35:42
【问题描述】:

在我的 docker 镜像的构建阶段,我想为每个后续的“RUN”命令自动设置一些环境变量。

但是,我想在 docker 容器中设置这些变量,因为设置它们取决于一些内部逻辑。

使用 dockerfile "ENV" 命令不好,因为它不能依赖内部逻辑。 (它不能依赖在 docker 容器内运行的命令)

通常(如果这不是 docker)我会设置我的 ~/.profile 文件。但是,docker 不会在非交互式 shell 中加载此文件。

所以此刻我必须使用以下命令运行每个 docker RUN 命令:

RUN bash -c "source ~/.profile && do_something_here"

但是,当我每次想要运行 bash 命令时都必须重复此操作时,这非常乏味(而且不干净)。有没有其他我可以使用的“配置文件”文件。

【问题讨论】:

    标签: bash ubuntu docker dockerfile


    【解决方案1】:

    您可以尝试像这样将 arg 设置为 env ARG my_env ENV my_env=${my_env} 在 Dockerfile 中, 并在 build-args 中传递 'my_env=prod' 以便您可以将 set env 用于后续 RUN 命令 您还可以在 docker compose yml 文件中使用 env_file: 选项,以防堆栈部署

    【讨论】:

    • 我在我的问题中明确指出,确定变量值的逻辑在容器内运行。因此,您的提议暗示我需要从容器中更改 dockerfile?我不认为这是可能的......
    • 上述方法是可能的,我已经使用了它,如果你没有任何逻辑来设置环境变量,如果你有一个逻辑在CMD中执行脚本,那么每次你启动容器,脚本被执行并根据逻辑设置环境,例如运行 tomcat 应用程序制作像#!/bin/ash or bash your logic script && /path/of/tomcat/catalina.sh 这样的脚本,将该脚本放入 CMD
    【解决方案2】:

    我遇到了类似的问题,但找不到令人满意的解决方案。我所做的是创建一个脚本来获取变量,然后执行操作。然后,我将重写 Dockerfile 中的 RUN 命令以改用该脚本。

    在您的情况下,如果您需要运行多个命令,您可以创建一个加载变量的包装器,运行作为参数给出的命令,并将该脚本包含在 docker 映像中。

    【讨论】:

      猜你喜欢
      • 2020-12-07
      • 2015-06-17
      • 2021-06-24
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2018-09-18
      相关资源
      最近更新 更多