Docker entrypoint and cmd together
Solution 1
When you use both entrypoint and command, the command section will be appended to entrypoint executable as arguments. Thus in your case:
ENTRYPOINT ["/start.sh"]
CMD ["aptly", "api", "serve"]
Is equivalent to running:
ENTRYPOINT["/start.sh", "aptly", "api", "serve"]
Solution 2
Can't tell much without knowing what the entrypoint does, but essentially this is what you are doing with this combination of entrypoint and cmd:
/start.sh aptly api serve
If you are after simply starting your server you can simply do something like this (valid path to the aptly
executable may be neccessary):
ENTRYPOINT ["aptly"]
CMD ["api", "serve"]
Unless you are doing much more than just running an executable there's no need for an entrypoint.
Solution 3
One important note, since nobody else has mentioned it: in order to use ENTRYPOINT
and CMD
together, you need to specify both in the array format. Doing something like this WILL NOT WORK:
ENTRYPOINT ./my_script.sh
CMD echo "hello world"
In the code above, ./my_script.sh
will be called, but CMD
will not be passed in.
Vana
Updated on June 15, 2022Comments
-
Vana almost 2 years
I try to setup a Docker with both entrypoint and cmd.
FROM debian:stretch RUN apt-get update && \ apt install gnupg ca-certificates -y RUN echo "deb http://repo.aptly.info/ squeeze main" > /etc/apt/sources.list.d/aptly.list RUN apt-key adv --keyserver keys.gnupg.net --recv-keys 9E3E53F19C7DE460 RUN apt update && apt install aptly -y ADD aptly.conf /etc/aptly.conf ADD start.sh . VOLUME ["/aptly"] ENTRYPOINT ["/start.sh"] CMD ["aptly", "api", "serve"]
But entrypoint script is not stopping... The cmd command is not launching
Here my script :
#!/bin/bash set -e init_aptly() { #import pgp key #create nginx root folder in /aptly su -c "mkdir -p /aptly/.aptly/public" echo "12" #initialize repository #aptly create repo doze-server - distribution="stable" } #check for first run if [ ! -e /aptly/.aptly/public ]; then init_aptly echo "13" fi echo "14"
The script always echo 14, I would like only one and then, execute the cmd command from dockerfile
-
Vana over 6 yearsNo need cmd, just ENTRYPOINT [/start.sh aptly api serve]?
-
emix over 6 yearsSorry I don't understand your question.
-
yamenk over 6 yearsYou can combine executable like bash scripts
CMD ./start.sh && aptly api serve
-
George Pligoropoulos almost 6 yearsThis is so intuitive of course.... Strong negative feelings for whoever dev implemented it like so!
-
rj487 almost 5 yearsThis ans saved me even in 2019
-
xnervwang almost 3 yearsWeird... behavior?
-
benjaminchanming over 2 yearsThanks, you saved me from hours of debugging!
-
ADJenks almost 2 yearsI must be blind but I couldn't seem to see where in the documentation it explains this. Can someone please put a link to the docs showing this?