"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo ejecutar un comando solo una vez en Docker Compose?

¿Cómo ejecutar un comando solo una vez en Docker Compose?

Publicado el 2024-11-19
Navegar:274

How to Run a Command Only Once in Docker Compose?

Ejecutar un comando una vez en Docker Compose

Al trabajar con un archivo de Docker Compose, puede que sea necesario ejecutar un comando específico solo una vez, a menudo durante la configuración inicial. de una aplicación. Este requisito surge cuando la aplicación depende de una base de datos que necesita ser inicializada, y la inicialización debe ocurrir solo en la primera ejecución.

En este caso, el usuario tiene la intención de ejecutar el comando ./my-project - configuración para agregar la información necesaria a la base de datos. Para lograr esto, se recomienda incorporar un script de punto de entrada en el contenedor.

Script de punto de entrada

Un script de punto de entrada proporciona un mecanismo para ejecutar comandos personalizados antes de iniciar la aplicación principal. Dentro del script del punto de entrada, es posible verificar si la base de datos ya se ha inicializado. Si se requiere inicialización, el script puede realizar los pasos de configuración.

Este enfoque garantiza que el comando de inicialización se ejecute solo una vez, incluso si se reinicia el contenedor o se amplía el servicio.

Archivo docker-compose.yml

Para implementar esta solución, modifique el archivo docker-compose.yml para incluir el siguiente script en la definición del servicio my_project:

services:
  my_project:
    build: .
    volumes:
      - data:/app
    ports:
      - "6060:8080"
    depends_on:
      - mongo
    entrypoint: ["/app/entrypoint.sh"]

En este caso, los datos son el volumen que contiene el código de la aplicación y el punto de entrada.sh es el script del punto de entrada.

script de entradapoint.sh

Cree un script Entrypoint.sh con el siguiente contenido:

#!/bin/bash

# Check if database is initialized.
mongo mongo://admin:admin@mongo:27017/my_project --eval "db.user.findOne()" > /dev/null 2>&1

# If the database is not initialized, perform setup.
if [ $? -ne 0 ]; then
  /app/my_project -setup
fi

# Start the application.
/app/my_project

En este script, mongo es el nombre de host del contenedor Mongo y my_project es el nombre de la base de datos.

Este script verifica si existe un documento en particular en la colección de usuarios del base de datos. Si el documento no existe, indica que la base de datos no se ha inicializado y se ejecuta el comando de configuración. De lo contrario, la aplicación se inicia normalmente.

Eliminación del "contenedor de solo datos"

Tenga en cuenta que el usuario utilizó inicialmente un "contenedor de solo datos" para montar el volumen de la base de datos. Sin embargo, este enfoque ya no es necesario con Docker 1.9 y posteriores, que admiten volúmenes con nombre. Por lo tanto, el contenedor mongodata se puede eliminar del archivo docker-compose.yml y el servicio mongo se puede modificar para usar el volumen nombrado directamente.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3