我正在为红宝石应用程序构建一个容器。我的应用程序的配置包含在环境变量中(通过dotenv加载到应用程序内部)。
这些配置变量之一是应用程序的公共ip,它在内部用于建立链接。我需要添加一个dnsmasq条目,将该ip指向容器内部的127.0.0.1,以便它可以获取应用程序的链接,就好像未对其进行容器化一样。
因此ENV,我试图在我的Dockerfile中设置一个将环境变量传递给容器的。
ENV
我尝试了几件事。
ENV REQUEST_DOMAIN $REQUEST_DOMAIN ENV REQUEST_DOMAIN `REQUEST_DOMAIN`
一切都通过“ REQUEST_DOMAIN”字符串而不是环境变量的值。有没有一种方法可以将环境变量值从主机传递到容器?
您应该在Dockerfile中使用此目的的ARG指令。
ARG
该ARG指令定义了一个变量,用户可以在构建时使用docker build命令使用该变量将--build-arg <varname>=<value>标志传递给构建器。
--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。
--build-arg
注2: 如果用户指定了未在Dockerfile中定义的构建参数,则该构建会输出警告:
[警告]没有使用一个或多个build-args [foo]。