ENTRYPOINT и CMD оба определяют, что запускается при старте контейнера, но они служат разным целям и взаимодействуют определённым образом. Понимание различия (и двух форм — exec vs shell) важно для написания Dockerfiles, которые ведут себя правильно.
CMD — команда по умолчанию (переопределяемая)
CMD ["node", "server.js"]
# → the DEFAULT command when the container starts
# → but it's REPLACED if you pass a command at run time:
# docker run myapp echo hello → runs "echo hello" INSTEAD of node server.js
предоставляет , которая любой командой, переданной в .
