RUN echo命令的Docker参数

时间:2017-11-23 16:10:42

标签: docker

作为Dockerfile的一部分,我试图修改一个文本文件(ssh_config),以包含一个在构建时由用户(作为ARG)传递给docker容器的变量。

在我的Dockerfile中,我(这不是整个文件):

ARG key_name
RUN echo 'Host geoserver\n\
User user\n\
HostName 38.191.191.111\n\
IdentityFile /root/$key_name' >> /etc/ssh/ssh_config

这会收集参数key_name,然后将一些文本附加到ssh_config文本文件中。

运行如下:

docker build --build-arg key_name=GC -t pyramid .

当我检查已写入的内容时,key_name变量尚未被解析,而是被写为文本(字面意思是$ key_name)。显然,我希望将它替换为通过ARG传递的变量。

我尝试过使用${key_file}而不仅仅是$key_file,我只是在文本文件中获得相同的文字,但包含花括号。

所以我的问题是,如何在RUN echo语句中正确使用ARG变量?

2 个答案:

答案 0 :(得分:6)

首先:确保您的ARG在<{strong> 后FROM来到。请参阅:https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact

第二:As you can see here,变量不会在''内被解释,因此请改用""

答案 1 :(得分:5)

当您使用单引号包围变量时,它不会被替换。

如果您需要文件中的单个qoutes,只需用双引号括起所有内容,否则只需将所有单引号一起删除即可。

ARG key_name
RUN echo "'Host geoserver\n\
User user\n\
HostName 38.191.191.111\n\
IdentityFile /root/$key_name'" >> /etc/ssh/ssh_config