La opción command en Docker Compose permite especificar el comando que debe ejecutar un contenedor al iniciarse. Esta opción es útil cuando necesitas sobrescribir el comando por defecto definido en la imagen Docker del contenedor. Puedes usar command para personalizar el comportamiento de inicio de un servicio sin necesidad de modificar la imagen base.
command en Docker Compose
En un archivo docker-compose.yml, puedes agregar command dentro de un servicio para definir o sobrescribir el comando de inicio.
command
version: '3'
services:
web:
image: nginx
command: ["nginx", "-g", "daemon off;"]
En este caso, el contenedor de Nginx se ejecutará en primer plano, ya que el comando ["nginx", "-g", "daemon off;"] asegura que el proceso no se ejecute en segundo plano, lo cual es necesario para que Docker mantenga el contenedor en ejecución.
command
command: "python app.py"
command: ["python", "app.py"]
Ambos formatos son equivalentes y puedes usar el que te resulte más cómodo o adecuado para el comando que necesites.
command en Docker Compose
Si estás usando una imagen de Node.js que por defecto ejecuta node server.js y necesitas ejecutar un archivo diferente (node app.js), puedes hacerlo con command:
version: '3'
services:
node_app:
image: node:14
command: "node app.js"
Esto hace que el contenedor ejecute node app.js en lugar del comando predefinido.
Puedes configurar command para que el contenedor ejecute un script al iniciar, por ejemplo:
version: '3'
services:
app:
image: my_custom_image
command: "./start.sh"
Aquí, el contenedor ejecutará el script start.sh en lugar del comando por defecto. Es importante que el script tenga permisos de ejecución dentro de la imagen.
Es posible usar command para pasar argumentos dinámicos al comando principal. Por ejemplo, si tienes un servicio de Python que recibe una variable de entorno y la usa como parámetro:
version: '3'
services:
python_app:
image: python:3.9
environment:
- ENV_VAR=dev
command: ["python", "app.py", "--env", "${ENV_VAR}"]
Este comando ejecutará python app.py --env dev, usando el valor de la variable de entorno ENV_VAR.
Si deseas ejecutar varios subcomandos en una sola línea, puedes combinar command con sh -c:
version: '3'
services:
db:
image: mysql
command: "sh -c 'echo Iniciando; mysqld'"
Este ejemplo primero imprime un mensaje (echo Iniciando) y luego ejecuta el servidor MySQL (mysqld).
command y entrypoint
ENTRYPOINT definido en la imagen Docker.
ENTRYPOINT de la imagen, reemplazando por completo la configuración de inicio.
Usa command cuando solo necesites modificar el comando de ejecución, y considera entrypoint si deseas reemplazar el punto de entrada completo del contenedor.
Para más información sobre command en Docker Compose, consulta la documentación oficial de Docker Compose.
Jorge García
Fullstack developer