QA
Beginner LevelDocker & Deployment

What is the difference between CMD and ENTRYPOINT in a Dockerfile?

❓ Interview Prompt: Compare CMD and ENTRYPOINT regarding default arguments, override behavior at runtime, and shell vs exec form.

CMD and ENTRYPOINT both define what runs when a container starts, but they interact in specific ways:

CMD — Default Arguments (Easily Overridden):

•
Provides default arguments for the container start command.
•
Fully overridden when you pass arguments to docker run: docker run myimage <override>.
•
Best for containers that should be flexible (e.g., running different scripts).

ENTRYPOINT — Fixed Executable (Hard to Override):

•
Sets the executable that always runs — it is NOT replaced by docker run arguments.
•
docker run arguments are appended to ENTRYPOINT as extra arguments.
•
Override requires the --entrypoint flag explicitly.

Combined Usage (Best Practice):

Use ENTRYPOINT for the fixed binary and CMD for overridable default arguments:

```

ENTRYPOINT ["node"] # fixed binary

CMD ["server.js"] # default arg, replaceable by: docker run myimage worker.js

```

Shell vs Exec Form:

•
Shell form: CMD npm start — runs via /bin/sh -c, meaning PID 1 is sh, not your app. Signals (SIGTERM) may not reach the process.
•
Exec form: CMD ["npm", "start"] — runs directly, your app gets PID 1 and receives signals properly.

Code Implementation Example

dockerfile
# Pattern: ENTRYPOINT = fixed binary, CMD = overridable default argument
FROM node:20-alpine
WORKDIR /app
COPY . .

ENTRYPOINT ["node"]   # always runs node
CMD ["server.js"]     # default: node server.js

# docker run myimage              → runs: node server.js
# docker run myimage worker.js   → runs: node worker.js  (CMD overridden)
# docker run --entrypoint="" myimage ls  → override ENTRYPOINT entirely
💡ENTRYPOINT pins the binary; CMD supplies overridable default arguments appended to it.
🎯 Interview Key Takeaway

Use exec-form ENTRYPOINT for the fixed binary and CMD for overridable defaults. Always use exec form (JSON array) to ensure your app receives OS signals as PID 1.

#Dockerfile#CMD#ENTRYPOINT#PID1#Signals#Beginner
Back to all Docker & Deployment Questions→

More Docker & Deployment Interview Questions

Beginner LevelDocker & Deployment

How do Docker Multi-Stage Builds minimize image size and improve security?

Beginner LevelDocker & Deployment

What is the difference between a Docker Container and a Virtual Machine (VM)?

Beginner LevelDocker & Deployment

What is the difference between a Docker Image and a Docker Container?