Estoy tratando de configurar un contenedor que ejecuta MongoDB que se llena con datos usando mongorestore cuando se inicia. La idea es configurar rápidamente una base de datos ficticia para probar y simular.
Mi Dockerfile se ve así:
FROM mongo:bionic COPY ./db-dump/mydatabase/* /db-dump/y docker-compose.yml se ve así:
version: "3.1" services: mongo: build: ./mongo command: mongorestore -d mydatabase ./db-dump ports: - "27017:27017" Si ejecuto esto con docker-compose up , se detiene por un tiempo y luego aparece un error que dice:
error connecting to host: could not connect to server: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: localhost:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : dial tcp 127.0.0.1:27017: connect: connection refused }, ] } Sin embargo, abrir una CLI en el contenedor y ejecutar exactamente el mismo comando funciona sin problemas. Intenté agregar -h con el nombre del contenedor o 127.0.0.1, y no hay diferencia. ¿Por qué este comando no puede conectarse cuando funciona bien una vez que el contenedor se está ejecutando?
Hay una mejor manera que anular el comando predeterminado: usar /docker-entrypoint-initdb.d :
Cuando se inicia un contenedor por primera vez, ejecutará archivos con extensiones
.shy.jsque se encuentran en/docker-entrypoint-initdb.d. Los archivos se ejecutarán en orden alfabético. Los archivos.jsserán ejecutados por mongo utilizando la base de datos especificada por la variable MONGO_INITDB_DATABASE, si está presente, o pruebe lo contrario. También puede cambiar de base de datos dentro del script.js.
[ Fuente ]
Así que simplemente escribe ese comando en un archivo llamado mongorestore.sh :
mongorestore -d mydatabase /db-dumpy luego montarlo dentro junto con el archivo de volcado:
version: "3.1" services: mongo: image: mongo:bionic ports: - "27017:27017" volumes: - ./mongorestore.sh:/docker-entrypoint-initdb.d/mongorestore.sh - ./db-dump:/db-dumpNi siquiera necesita un Dockerfile.