RUN echo命令的Docker参数

iyr7buue  于 2023-05-06  发布在  Docker
关注(0)|答案(2)|浏览(284)

作为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变量?

yr9zkbsy

yr9zkbsy1#

首先:确保您的ARGFROM之后。参见:https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
第二个:As you can see here,变量不会在''内部被解释,所以使用""代替。

sdnqo3pr

sdnqo3pr2#

当你用单引号括住变量时,它不会被替换。
如果你需要在文件中使用单引号,只需用双引号将所有内容括起来,否则只需将单引号一起删除。

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

相关问题