2017-10-09 152 views
0

我的Dockerfile有一个奇怪的行为。我尽量做到写入文件与文本从环境来varibales:Dockerfile和环境变量

FROM ubuntu:14.04 

ENV KEY '' 
ENV VAL '' 

RUN echo "${KEY}:${VAL}" > /etc/test 

CMD [] 

我建立了这个形象,像这样运行:

docker run -it --rm -e KEY=aaa -e VAL=bbb mytest 

如果我显示的/ etc/test文件,它是空的(它是存在的,但是空的)。看起来,当它创建文件时,环境变量没有设置。

有什么想法?

谢谢

回答

2

在泊坞窗文件RUN echo "${KEY}:${VAL}" > /etc/test的命令时,你建立使用docker build ...

因此,这是合乎逻辑的,因为在这一点上ENV变量是空的图像被执行。 您需要将commad移动到将在图像启动时运行的CMD命令。

0

您可以将KEY和VALUE定义为参数,并在构建泊坞窗图像时设置它们的值。

FROM ubuntu:14.04 

ARG KEY 
ARG VAL 

RUN echo "${KEY}:${VAL}" > /etc/test 

CMD [] 

然后你可以使用这样构建映像:

docker build --build-arg KEY=<value> --build-arg VAL=<value> . 

https://docs.docker.com/engine/reference/builder/#using-arg-variables

+0

嗯...这意味着你需要为你键值对建立尽可能多的图像。在我的情况下,为什么不... – Cabrinha

+0

如果您更喜欢构建单个图像,并在运行时更改KEY和VAL值,则可以创建脚本并将其作为入口点运行,并将值作为环境变量传递给泊坞窗容器。 –