Configurar docker con mongodb para que cree una tabla

V

Buenas, estoy intentando instalar con docker mongodb, pero hay alguna forma de que en la instalacion se cree una database y una tabla? Para luego pasar ese fichero e instalar con compose, y no tener que configurar nada

B

.

JuAn4k4

Creo que mongo tiene un init que es un js para crear cosas.

V

he creado un .yaml

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
      MONGO_INITDB_DATABASE: test
    volumes:
        - /home/victor/Desarrollo/docker/mongo:/data/db
        - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
    ports:
        - "27017:27017"

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example

luego creo un init-mongo.js

db.createCollection("coleccion");

y nada , no hay manera

también intento entrar por shell y crear la colección o hacer algún comando y me sale siempre.

"command create requires authentication"

alguien que sepa de mongodb me puede ayudar?

1 respuesta
JuSt1

#4 Lo que has hecho con el script es solo montarlo a nivel de volumen para que cuando arranque, dentro tengas esa visibilidad, pero tienes que decirle al compose que ejecute el script después de que todo esté UP, te paso la info:

https://github.com/docker-library/wordpress/issues/205#issuecomment-278319730

Espero que te sirva! :)

V

le he añadido

command:
- init-mongo.js

ahora ni conecta cuando monto todo, xk será?

lo que hago es hacer stop de los contenedores uno a uno, luego hago
sudo docker-compose up -d
en la carpeta donde tenga el yaml y el fichero init-mongo.js, es así no? a ver si no lo está creando de nuevo, si no reiniciando o algo, y no funciona por eso

el js tiene esto

db.auth("root","example")
use test
db.createUser(
  {
    user: "myTester",
    pwd:  "example",   
roles: [ { role: "readWrite", db: "test" } ] } ) db.createCollection("coleccion");
V

vale, hay que hacer un .js ,sin la orden de command en el yaml.

En ese fichero puedes especificar el crear usuario y coleccion, lo que pasaba es que solo se lanza la 1º vez que se crea el contenedor, por eso parecía que no funcionaba.

Usuarios habituales