Ответ 1
В своем backend-приложении подключитесь к mongodb:27017
вместо 127.0.0.1:27017
. Где "mongodb" - это имя вашего контейнера в файле docker-compose.yml.
Я новичок в докере. Я пытаюсь создать контейнер MongoDB и контейнер NodeJS. Мой файл выглядит так:
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
Он должен запустить npm install
а затем node.
, Но docker-compose up
заканчивается с [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
то время как командный node.
, Я думаю, что это связано с bind_ip = 127.0.0.1
в файле /etc/mongod.conf
. Это правильно?
Я использую boot2docker в системе Win10.
Как я могу решить эту проблему, чтобы узел мог подключиться к MongoDB?
В своем backend-приложении подключитесь к mongodb:27017
вместо 127.0.0.1:27017
. Где "mongodb" - это имя вашего контейнера в файле docker-compose.yml.
Скорее всего, да. 127.0.0.1 указывает на localhost внутри контейнера mongodb, поэтому он недоступен извне контейнера. Вероятно, привязка к 0.0.0.0 будет работать.
С ссылкой, указанной вами в файле docker-compose.yml, ваш бэкэнд-контейнер должен затем подключиться к контейнеру mongodb:27017
через mongodb:27017
Вы должны указать контейнеру использовать его собственный IP-адрес вместо localhost.
Например, допустим, что вы создали код эшафота с помощью expressjs
, вам нужно писать в 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) {
.........
где 172.17.0.5
- $CONTAINER_IP
вы можете найти контейнер ip через $ docker inspect $CONTAINER_HOSTNAME | grep IPAddress
$ docker inspect $CONTAINER_HOSTNAME | grep IPAddress
Если вы все еще не можете понять, вы можете заглянуть в мое приложение Docker NodeJS и MongoDB
Я недавно столкнулся с подобной проблемой. Я запускаю docker toolbox под win 10, и вот как это сработало для меня:
1) Я должен был проверить, какой URL-адрес использует моя док-машина. Это можно проверить, выполнив команду docker-machine ls
. В нем будут перечислены доступные машины:
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) При запуске изображения mongodb укажите отображение порта
docker run -d -it -p 27017:27017 mongo
3) В этот момент действительный URL-адрес монго будет выглядеть примерно так
var dbhost = 'mongodb://192.168.99.100:27017/test
где 192.168.99.100
был машинным URL-адресом по умолчанию из точки 1)
Надеюсь, это поможет кому-то.