无法连接到在docker容器中运行的mongoDB

2fjabf4q  于 2023-03-22  发布在  Docker
关注(0)|答案(5)|浏览(497)

以下示例:https://docs.docker.com/engine/examples/mongodb/
当尝试连接到mongoDB时:mongo ip:27017(其中ip是来自boot 2docker ip的名称)+来自docker ps的端口号:
27017/传输协议
或使用-P
0.0.0.0:49155-〉27017/tcp
无论哪种方式,我都会得到以下错误:
警告:无法连接到ip:27017,原因:errno:61连接被拒绝
错误:无法连接到服务器ip:27017(ip),连接尝试在src/mongo/shell/mongo.js失败:148异常:连接失败

bvk5enib

bvk5enib1#

如果您指定了正确的端口,但仍然无法连接到在docker中运行的mongodb(像我一样),请确保您在连接URL中使用了服务名称(或容器名称),例如mongodb://mongodb_service:27017/mydb,这是在docker-compose.yml中定义的:

services:
  mongodb_service:
    image: mongo

我使用的是hostname值,这是不正确的。你可以通过查看Aliases部分的docker inspect mongodb_service来验证这一点。

yuvru6vn

yuvru6vn2#

我使用的是端口27017而不是49155(doh,端口转发)

0.0.0.0:49155->27017/tcp

感谢Zeisss。

w80xi6nr

w80xi6nr3#

如果您使用的是Mac并使用Docker Machine,请执行以下操作:

1. Get the name of the VM running docker daemon
$ **docker-machine ls**

2. Get the VM's IP info
$ **docker-machine env**

3. Connect with the mongo client to the VM IP and the mongo mapped port
$ **mongo VM-IP:port**
wbgh16ku

wbgh16ku4#

假设你的mongodb在一个容器中,其他容器要连接到它,它们都需要在同一个网络上。
要让mongodb和其他容器(想要连接它),使用下面的命令创建一个新的网络

docker network create --driver bridge my_bridge

然后使用--net标志运行mongodb和其他容器

docker run --net=my_bridge --name mongodb -p 27017:27017 mongodb
docker run --net=my_bridge --name my-service -p 7002:7002 my-service

现在,您应该能够从这些容器中使用给定的别名连接mongodb

mongo --host "mongodb:27017"
dy2hfwbg

dy2hfwbg5#

DATABASE_URI=mongodb://mongo:27017/db_name

应该是服务定义的数据库URI,如下所示(不是mongodb://localhostmongodb://IP)。使用服务名称或容器名称。

services  
  mongo:
    container_name: mongo
    image: mongo
    ports: 
      - '27017:27017'

相关问题