Docker Argument to a Run Echo Command

As part of a Dockerfile, I am attempting to modify a text file (ssh_config) to contain a variable passed through by the user (as an ARG) to the docker container at build time.

In my Dockerfile I have (this is not the entire file):

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

This collects the argument key_name, and then appends some text to the ssh_config text file.

This is run as follows:

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

When I check to see what has been written, the key_name variable hasn't been parsed, and instead has been written as text (so literally as $key_name). Obviously I want it to be replaced with the variable passed through ARG.

I have tried using ${key_file} instead of just $key_file, I just get the same text in the text file but with curly braces included.

So my question is, how can I use the ARG variable correctly within the RUN echo statement?

7

2 Answers

First: Make sure, your ARG comes after your FROM. See:

Second: As you can see here, variables won't be interpretad inside '', so use "" instead.

1

When you surround the variable with single quotes it doesn't get replaced.

If you need the single qoutes in the file just surround everything with double quotes, otherwise just remove the single quotes all together.

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

James H. Sterling

James H. Sterling

Environmental Science & Climate Journalist

James Sterling reports on renewable energy developments, climate policy, ecological conservation, and green tech innovations around the globe.

Share this article
Twitter Facebook Pinterest