Contenitore dock Mongodb con controllo di accesso al cliente

Vorrei creare un contenitore docker con un mongodb configurato con controllo di accesso client (authentication utente, vedi questo ).

Ho configurato correttamente un contenitore docker con mongo utilizzando questa image . Ma non usa il controllo di accesso mongo.

Il problema è che per abilitare il controllo di accesso devo eseguire mongodb con una specifica row di command ( --auth ) ma solo dopo aver creato il primo amministratore.

Con un'installazione standard di mongodb eseguo normalmente queste operazioni:

  • eseguire mongod senza --auth
  • collegarsi a mongo e aggiungere l'amministratore
  • riavviare il mongo con --auth

Come dovrei farlo con il docker? Poiché l'image mongo inizia sempre senza --auth . Devo creare una nuova image? O forse modificare il punto di ingresso?

Probabilmente mi manca qualcosa, sono nuovo a fare …

Ok, ho trovato una soluzione. In sostanza MongoDb ha una funzionalità che consente di impostare la protezione di accesso ( --auth ), ma consente la connessione localhost. Vedi l'exception mongo locale .

Quindi questo è il mio ultimo script:

 # Create a container from the mongo image, # run is as a daemon (-d), expose the port 27017 (-p), # set it to auto start (--restart) # and with mongo authentication (--auth) # Image used is https://hub.docker.com/_/mongo/ docker pull mongo docker run --name YOURCONTAINERNAME --restart=always -d -p 27017:27017 mongo mongod --auth # Using the mongo "localhost exception" add a root user # bash into the container sudo docker exec -i -t YOURCONTAINERNAME bash # connect to local mongo mongo # create the first admin user use admin db.createUser({user:"foouser",pwd:"foopwd",roles:[{role:"root",db:"admin"}]}) # exit the mongo shell exit # exit the container exit # now you can connect with the admin user (from any mongo client >=3 ) # remember to use --authenticationDatabase "admin" mongo -u "foouser" -p "foopwd" YOURHOSTIP --authenticationDatabase "admin" 

Se è in grado di utilizzare altre immagini esistenti, c'è un'image ben mantenuta con l'authentication predefinita abilitata per MongoDB e facile da colbind, chiamata tutum-docker-mongodb .

Utilizza anche variables ambientali che puoi utilizzare in app.

Ho incluso nel mio tutum.yml (o docker-compose.yml ) come così:

 mongo: image: 'tutum/mongodb:latest' environment: - MONGODB_PASS=<your-password-here> ports: - '27017:27017' - '28017:28017' 

Infine ho collegato il servizio web utilizzando:

 web: image: 'my-image' links: - 'mongo:mongo' ports: - '80:3000' restart: always 

Spero che sia d'aiuto!