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