我正在为一个ruby应用构建一个容器。我的应用程序的配置包含在环境变量中(使用dotenv加载到应用程序内部)。
其中一个配置变量是应用程序的公共ip,它在内部用于建立链接。我需要添加一个dnsmasq条目,将这个ip指向容器中的127.0.0.1,这样它就可以获取应用程序的链接,就好像它没有被容器化一样。
因此,我尝试在Dockerfile文件中设置一个ENV
,它会将一个环境变量传递给容器。
我试过一些方法。
ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`
不过,所有内容都传递"REQUEST_DOMAIN“字符串,而不是环境变量的值。有没有办法将环境变量值从主机传递到容器?
发布于 2014-01-28 02:13:44
所以你可以这样做:cat Dockerfile | envsubst | docker build -t my-target -
然后创建一个包含以下内容的Dockerfile:
ENV MY_ENV_VAR $MY_ENV_VAR
我猜有些特殊字符可能有问题,但这至少在大多数情况下是有效的。
发布于 2017-03-14 02:56:52
在不丧失使用COPY
或ADD
等命令的能力,并且不使用中间文件的情况下,使用envsubst
的另一种方法是使用Bash的Process Substitution
docker build -f <(envsubst < Dockerfile) -t my-target .
发布于 2015-03-20 06:57:57
从运行时创建的文件加载环境变量。
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
https://stackoverflow.com/questions/19537645
复制相似问题