当前位置: 首页 > 面试题库 >

在Dockerfile中获取环境变量值

林建本
2023-03-14
问题内容

我正在为红宝石应用程序构建一个容器。我的应用程序的配置包含在环境变量中(通过dotenv加载到应用程序内部)。

这些配置变量之一是应用程序的公共ip,它在内部用于建立链接。我需要添加一个dnsmasq条目,将该ip指向容器内部的127.0.0.1,以便它可以获取应用程序的链接,就好像未对其进行容器化一样。

因此ENV,我试图在我的Dockerfile中设置一个将环境变量传递给容器的。

我尝试了几件事。

ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`

一切都通过“ REQUEST_DOMAIN”字符串而不是环境变量的值。有没有一种方法可以将环境变量值从主机传递到容器?


问题答案:

您应该在Dockerfile中使用此目的的ARG指令。

ARG指令定义了一个变量,用户可以在构建时使用docker build命令使用该变量将--build-arg <varname>=<value>标志传递给构建器。

因此,您的 Dockerfile 将具有以下行:

ARG request_domain

或者,如果您希望使用默认值:

ARG request_domain=127.0.0.1

现在,您可以在Dockerfile中引用此变量:

ENV request_domain=$request_domain

那么您将像这样构建容器:

$ docker build --build-arg request_domain=mydomain Dockerfile

注意1: 如果您ARG在Dockerfile中引用了,但在中将其排除,则不会生成映像--build-arg

注2: 如果用户指定了未在Dockerfile中定义的构建参数,则该构建会输出警告:

[警告]没有使用一个或多个build-args [foo]。



 类似资料:
  • 我需要在Dockerfile中传递环境变量,如下所示。我可以知道做这件事的有效方法吗。我尝试使用构建参数 但它没有用。 这是我的 Dockerfile 所以当我运行我的docker容器时,我相信我不想向它发送任何环境变量。 请指教。

  • 问题内容: 已在Windows机器(Windows 7)中设置了环境变量,并尝试从以下Java代码获取变量的值。但是,它返回一个空值。 现在,如果我执行以下代码,它将引发安全异常,这意味着用户没有该变量。 后来,我在JRE安全策略文件中添加了权限,并添加了以下条目,但仍返回空值。 问题答案: 此代码段不应返回null以便解决您的问题。

  • 问题内容: 我有一个从源代码下载并构建GTK的dockerfile,但是以下行未更新映像的环境变量: 我读到我应该使用ENV来设置环境值,但是以下指令似乎也不起作用: 这是我的整个Dockerfile: 问题答案: 您可以使用环境更换你如下:

  • 我有一个dockerfile,它从源代码处下载并构建GTK,但是下面一行并没有更新我的映像的环境变量: 我读到我应该使用ENV来设置环境值,但是下面的指令似乎也不起作用: 这是我的全部DockerFile:

  • 因为我放在容器中的应用程序的bin名称可以更改(docker构建是更大构建的一部分,我很容易将正确的名称从一个构建传递到另一个构建)我想做这样的事情: < code >入口点["$PATH_TO_BIN"] 但由于没有外壳来评估,这通常会失败。理论上我可以去 但在这种情况下,我在执行时无法传递任何参数。 有没有可能在构建期间使用exec form并计算args或env变量(这样在运行时就不需要sh

  • 问题内容: 我给人的印象是,可以如下将环境变量设置在一行上,以最大程度地减少中间图像。 但是,运行基于此代码段的容器并调用,我看到变量没有单独分配,而是组合为单个字符串。 但是,如果我按如下所示显式设置每个变量,则可以得到预期的输出,并且在调用变量时没有错误。 问题: 是否可以将环境变量的设置合并在一行上?如果是这样,我该怎么办?这是一个好习惯吗? 问题答案: 有两种用于指定环境的格式。如果您需要