Instrucción ENTRYPOINT Dockerfile

instruccion-entrypoint-dockerfile
instruccion-entrypoint-dockerfile

En esta lección aprenderás instrucción ENTRYPOINT Dockerfile, la instrucción que fija el ejecutable principal de una imagen y permite construir contenedores que se comportan como comandos.

ENTRYPOINT se parece a CMD porque afecta al arranque del contenedor, pero no cumple exactamente la misma función. CMD suele aportar valores por defecto; ENTRYPOINT suele fijar el programa principal.

👉 Y recuerda, si quieres aprender más de Linux, visita el curso de Linux gratis.

🐳 Si quieres aprender más de Docker, visita el curso de Docker gratis.

Qué hace la instrucción ENTRYPOINT Dockerfile

Problema: algunas imágenes deben comportarse como una herramienta concreta. Quieres que al ejecutar el contenedor siempre arranque ese ejecutable, aunque el usuario cambie argumentos.

Qué aporta Docker: ENTRYPOINT define el ejecutable principal. Si lo combinas con CMD, CMD puede actuar como lista de argumentos por defecto.

PatrónCuándo usarlo
ENTRYPOINT soloCuando quieres fijar siempre el ejecutable.
ENTRYPOINT + CMDCuando quieres ejecutable fijo con argumentos por defecto reemplazables.
CMD soloCuando quieres un comando por defecto fácil de sustituir.

Forma exec y forma shell

ENTRYPOINT puede escribirse como una lista JSON (forma exec) o como una orden de shell. La forma exec ejecuta el programa directamente y deja que reciba las señales de Docker como proceso principal. La forma shell pasa por /bin/sh -c; además de cambiar la interpretación de la orden, puede dejar el shell como PID 1 y dificultar el cierre ordenado.

FormaCómo se comportaUso recomendado
ENTRYPOINT [«programa», «argumento»]Ejecuta directamente el programa; CMD puede aportar argumentos por defecto.Preferible para la mayoría de servicios y herramientas.
ENTRYPOINT programa argumentosSe interpreta mediante el shell y no combina los argumentos de CMD ni los que se pasan al ejecutar el contenedor.Solo cuando necesitas expresamente procesamiento del shell; si un script inicia el proceso, usa exec.

Ejemplo práctico

FROM alpine:3.20
ENTRYPOINT ["ping"]
CMD ["-c", "4", "1.1.1.1"]
docker build -t entrypoint-demo:1.0 .
docker run --rm entrypoint-demo:1.0
docker run --rm entrypoint-demo:1.0 -c 2 8.8.8.8

El primer docker run usa los argumentos por defecto de CMD. El segundo mantiene ping como ENTRYPOINT, pero reemplaza los argumentos por otros valores.

Cómo se combinan ENTRYPOINT y CMD

Con ENTRYPOINT en forma exec, Docker lo trata como el ejecutable fijo. CMD aporta sus argumentos predeterminados, y los argumentos añadidos después del nombre de la imagen reemplazan esos valores. Así la imagen mantiene su propósito sin impedir que quien la ejecuta cambie las opciones.

ConfiguraciónComando de ejecuciónQué ocurre
ENTRYPOINT [«ping»] y CMD [«-c», «4», «1.1.1.1»]docker run imagenUsa ping con los argumentos predeterminados de CMD.
La misma configuracióndocker run imagen -c 2 8.8.8.8Conserva ping y reemplaza los argumentos de CMD.
La misma imagendocker run –entrypoint sh imagenSobrescribe ENTRYPOINT para una ejecución de diagnóstico.

Errores comunes

  • Confundir ENTRYPOINT con CMD: CMD se sustituye fácilmente; ENTRYPOINT fija el ejecutable principal.
  • Usar shell form sin necesidad: puede dificultar el manejo correcto de señales.
  • No permitir argumentos: una imagen rígida puede ser incómoda de usar.
  • Meter lógica compleja en un script sin exec: el proceso puede no recibir señales correctamente.

Advertencia: si usas un script como entrypoint, termina lanzando el proceso principal con exec para que reciba señales de parada correctamente.

Lecciones relacionadas del curso Docker

Documentación oficial y recursos

La instrucción ENTRYPOINT Dockerfile queda bien usada cuando fija claramente el ejecutable principal y deja que CMD aporte argumentos por defecto cuando tenga sentido.

Después de esta lección, la comparación entre CMD y ENTRYPOINT te ayudará a decidir cuál conviene en cada imagen.

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *