Volver a la página principal
martes 5 noviembre 2024
10

Cómo usar command en Docker Compose

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.

Uso de 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.

Ejemplo básico de uso de 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.

Formatos para command

  • Como una cadena de texto:
command: "python app.py"
  • Como una lista de argumentos:
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.

Ejemplos de uso de command en Docker Compose

1. Sobrescribir el comando de inicio de un servicio

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.

2. Ejecutar un shell script al inicio del contenedor

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.

3. Pasar parámetros personalizados al comando

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.

4. Comandos complejos con múltiples subcomandos

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).

Diferencia entre command y entrypoint

  • command sobrescribe el comando de ejecución definido en la imagen, pero respeta el ENTRYPOINT definido en la imagen Docker.
  • entrypoint sobrescribe el 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.

Referencia oficial

Para más información sobre command en Docker Compose, consulta la documentación oficial de Docker Compose.

Etiquetas:
docker
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer