在Dockerfile中获取环境变量值

docker

183464 观看

6回复

24621 作者的声誉

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

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

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

我尝试了几件事。

ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`

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

作者: Damien MATHIEU 的来源 发布者: 2013 年 10 月 23 日

回应 (6)


-5

1175 作者的声誉

添加-e用于将环境变量传递到容器的键。例:

$ MYSQLHOSTIP=$(sudo docker inspect -format="{{ .NetworkSettings.IPAddress }}" $MYSQL_CONRAINER_ID)
$ sudo docker run -e DBIP=$MYSQLHOSTIP -i -t myimage /bin/bash

root@87f235949a13:/# echo $DBIP
172.17.0.2
作者: Valentin Kantor 发布者: 26.01.2014 08:45

56

1409 作者的声誉

因此,您可以执行以下操作: cat Dockerfile | envsubst | docker build -t my-target -

然后创建一个类似Dockerfile的文件:

ENV MY_ENV_VAR $MY_ENV_VAR

我想某些特殊字符可能有问题,但这至少在大多数情况下都有效。

作者: jonasfj 发布者: 27.01.2014 06:13

10

101 作者的声誉

从运行时创建的文件中加载环境变量。

export MYVAR="my_var_outside"
cat > build/env.sh <<EOF
MYVAR=${MYVAR}
EOF

...然后在Dockerfile中

ADD build /build
RUN /build/test.sh

test.sh从env.sh加载MYVAR的地方

#!/bin/bash
. /build/env.sh
echo $MYVAR > /tmp/testfile
作者: Dan C 发布者: 19.03.2015 10:57

354

6443 作者的声誉

决定

您应该在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]。

作者: Daniel van Flymen 发布者: 04.01.2016 09:23

18

301 作者的声誉

另一种envsubst不丢失使用诸如COPY或的命令ADD且不使用中间文件的能力的替代方法是使用Bash的Process Substitution

docker build -f <(envsubst < Dockerfile) -t my-target .

注意:最初想在jonasfj的答案中添加评论,但似乎我没有足够的声誉。

作者: L. Alberto Giménez 发布者: 13.03.2017 06:56

3

500 作者的声誉

如果您只想查找并替换Dockerfile中的所有环境变量($ ExampleEnvVar),则可以对其进行构建:

envsubst < /path/to/Dockerfile | docker build -t myDockerImage . -f -

作者: snassr 发布者: 31.10.2017 07:30
32x32