Docker 运行 mongodb 无法连接 mongosh 问题

场景

在宿主机上依次执行以下命令, 拉取 mongo 镜像, 创建容器并运行

docker pull mongo
docker run --rm -d \
--name mongo-test \
mongo \
bash

进入容器中:

docker exec -it mongo-test bash

执行使用 mongosh 连接 mongo 数据库的命令:

mongosh

报错:

MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017

分析

连接出错, 可能是 docker 容器的网络问题, 于是修改默认配置 ip , 修改之后没找到重新加载配置的方法, 遂重启容器, 顺便学习 docker cp 的用法, 重新加载配置也失败, 查看本地正常运行在 docker 中的 mongo 容器, 并没有修改 ip 为 0.0.0.0 , 又去复习了 127.0.0.1 和 0.0.0.0 以及 localhost 的区别.
后来想到, 有没有可能 mongo 服务没有启动, 没有启动应该也会导致连接出错. 果然是这样, 启动 mongodb 的命令是 mongod, 启动之后解决问题. 同时需要修改容器启动命令为:

docker run --rm -d \
--name mongo-test \
mongo \
mongod

之后再使用 docker exec 进入容器使用 mongosh 连接正常.
出现这个问题的原因:

  1. 不清楚镜像和容器启动的关系, 以为容器启动之后 mongodb 会自动运行, 但实际需要在启动命令中显式声明
  2. history没有找到本地 mongo 容器启动的命令, 自己按习惯顺手写了 bash

实际上我有很多坑都是这样, 灯不亮, 灯泡没问题, 插座开关也开了, 但插座没插电.

总结

docker 启动命令中, 需要显式指明要启动的服务, mongodb 镜像并不会自动启动 mongodb 服务.
docker 容器中需要连接 127.0.0.1 时, 不需要作额外配置.

posted @ 2023-04-19 18:13  Boiiea  阅读(1052)  评论(0)    收藏  举报