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