46

I want to pass in a parameter into a docker CMD. For example, if the contents of Dockerfile are

FROM ubuntu:15.04
CMD ["/bin/bash", "-c", "cat", "$1"]

Then I want to run as follows:

docker build -t cat_a_file .
docker run -v `pwd`:/data cat_a_file /data/Dockerfile

I would like the contents of Dockerfile to be printed to the screen. But instead, Docker thinks that /data/Dockerfile is a script that should override the CMD, giving the error

Error response from daemon: Cannot start container 7cfca4: 
[8] System error: exec: "/data/Dockerfile": permission denied

How can this be avoided?

1 Answer 1

50

Use ENTRYPOINT for stuff like this. Any CMD parameters are appended to the given ENTRYPOINT.

So, if you update the Dockerfile to:

FROM ubuntu:15.04
ENTRYPOINT ["/bin/bash", "-c", "cat"]

Things should work as you wish.

Also, as you don't need the $1, you should be able to change it to:

FROM ubuntu:15.04
ENTRYPOINT ["/bin/cat"]

I haven't tested any of this, so let me know if it doesn't work.

Sign up to request clarification or add additional context in comments.

2 Comments

Just so we can make more complicated scripts, what is the correct way to use the $1-style argument?
Probably best to use environment variables in those cases. You can't use $1 etc.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.