Je suis nouveau sur docker. J'essaie de créer un conteneur MongoDB et un conteneur NodeJS. Mon dossier ressemble:
version: '2'
services:
backend:
image: node:5.11-onbuild
ports:
- "3001:3001"
volumes:
- .:/code
working_dir: "/code"
links:
- mongodb
mongodb:
image: mongo:3.3
expose:
- 27017
Il devrait s'exécuter npm install
puis node .
. Mais docker-compose up
se termine par [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
tandis que la commande node .
. Je pense que c'est à cause du bind_ip = 127.0.0.1
dans le fichier /etc/mongod.conf
. Est-ce correct?
J'utilise boot2docker sur un système Win10.
Comment puis-je résoudre ce problème afin que le nœud puisse se connecter à MongoDB?
Dans votre application principale, connectez-vous à mongodb:27017
au lieu de 127.0.0.1:27017
. Où 'mongodb' est le nom de votre conteneur dans docker-compose.yml.
J'ai récemment rencontré un problème similaire. J'utilise Docker Toolbox sous Win 10 et voici comment cela a fonctionné pour moi:
1) J'ai dû vérifier l'URL que ma machine Docker par défaut utilise. Cela peut être vérifié en exécutant docker-machine ls
commande. Il listera les machines disponibles:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:1234 v17.06.0-ce
rancher-client - virtualbox Stopped Unknown
rancher-server - virtualbox Stopped Unknown
2) Lors de l'exécution de l'image mongodb, spécifiez le mappage de port
docker run -d -it -p 27017:27017 mongo
3) À ce stade, l'URL mongo valide ressemblerait à ceci
var dbhost = 'mongodb://192.168.99.100:27017/test
où 192.168.99.100
était l'URL de la machine par défaut à partir du point 1)
J'espère que cela aide quelqu'un.
Vous devez dire au conteneur d'utiliser sa propre adresse IP au lieu de localhost.
Par exemple, supposons que vous avez généré du code d'échafaudage avec expressjs
, vous devez écrire dans routes/index.js
var mongodb = require('mongodb');
router.get('/thelist', function(req, res){
// Get a Mongo client to work with the Mongo server
var MongoClient = mongodb.MongoClient;
// Define where the MongoDB server is
var url = 'mongodb://172.17.0.5:27017/dbname';
// Connect to the server
MongoClient.connect(url, function (err, db) {
.........
où 172.17.0.5
est le $CONTAINER_IP
vous pouvez trouver l'ip du conteneur via $ docker inspect $CONTAINER_HOSTNAME | grep IPAddress
Si vous ne comprenez toujours pas, vous pouvez jeter un œil à mon Docker NodeJS et MongoDB app
Très probablement oui. 127.0.0.1 pointe vers localhost inside le conteneur mongodb, il n'est donc pas accessible de l'extérieur du conteneur. La liaison à 0.0.0.0 fonctionnera probablement.
Avec le lien que vous avez spécifié dans le docker-compose.yml, votre conteneur backend devrait alors pouvoir se connecter au conteneur mongo via mongodb:27017