The interaction of CMD and ENTRYPOINT
The CMD and ENTRYPOINT instructions in a Dockerfile interact with each other in an interesting way.
Consider this simple dockerfile:
from alpine:latest
cmd echo A
When I run docker run -it $(docker build -q .)
The out put I get is A
, like you'd expect.
With an additional entrypoint
instruction:
from alpine:latest
entrypoint echo B
cmd echo A
I get just B
no A
.
Each of these commands are using the shell form of the instruction. What if I use the exec form?
from alpine:latest
entrypoint ["echo", "B"]
cmd ["echo", "A"]
Then! Surprisingly, I get B echo A
.
When using the exec form cmd
provides default arguments to entrypoint
You can override those default arguments by providing an argument to docker run
:
docker run -it $(docker build -q .) C
B C
Tweet