Bug:突然连接不上docker中的mongo
1 问题描述
今天启动Idea的某个SpringBoot项目时,发现连接docker中的mongoDB超时,但是此时我使用
docker ps -a
发现mongo已经是启动了
于是我猜想是不是Idea的问题,我选择用Navicat的连接Mongo,发现也是连接超时。我猜想应该是mongo的问题。
2 问题分析
①mongo有没有启动
②linux防火墙或端口是否开启
③mongo是否配置了允许外部访问连接
④docker网桥配置后没有开启转发,导致容器启动后没有网络
3 解决问题
经过我的排查,最后发现是docker的问题
是没有开启转发,docker网桥配置完后,需要开启转发,不然容器启动后,就会没有网络,配置/etc/sysctl.conf,添加net.ipv4.ip_forward=1
首先,我们停止我们正在运行的mongo容器
$ docker ps // 查看所有正在运行容器
$ docker stop containerId // containerId 是容器的ID
其他docker命令
:
$ docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID
$ docker stop $(docker ps -a -q) // stop停止所有容器
$ docker rm $(docker ps -a -q) // remove删除所有容器
- 修改配置文件
vim /etc/sysctl.conf
"在文件中添加下面的配置"
net.ipv4.ip_forward=1 #添加此行配置
注:也可修改此文件:/usr/lib/sysctl.d/00-system.conf
- 重启服务
systemctl restart network && systemctl restart docker
- 查看是否修改成功
sysctl net.ipv4.ip_forward
如果返回
net.ipv4.ip_forward = 1
则表明成功
4. 启动mongo
docker start 57baa4d5cbfa
docker ps -n 5 查看最近的5个容器
停止某个docker中的容器 docker stop 容器ID
启动某个docker中的容器 docker start 容器ID【restart:重启】
参考文章:
https://blog.csdn.net/cljdsc/article/details/115207336
4 拓展(boot项目连接不到mongo)
java.net.ConnectException: 拒绝连接 (Connection refused)
4.1 端口号是否被占用
- mongo端口(27017)是否被占用
netstat -ano | grep 27017
- 通过端口号,反查进程
lsof -i:端口号
netstat -tunlp | grep 端口号
两条命令皆可【ps -ef | grep 27017特殊情况也可以】
其中第一个是PID(进程号)
- 通过PID来杀死对应的进程
kill -9 PID
4.2 重新创建mongo容器,外挂文件
如果实在不行的话,可以重新创建mongo容器,并且将配置文件外挂
①拉取镜像
docker pull mongo:4.0
②创建mongo配置文件及目录
mkdir -p /data/mongo/conf
mkdir -p /data/mongo/data
mkdir -p /data/mongo/log
③修改配置文件内容
进入配置文件目录:
cd /data/mongo/conf
修改配置文件
vim mongodb.conf
配置文件内容,复制即可
#端口
port=27017
#数据库文件存放目录
dbpath=/data/mongo/data
#日志文件存放路径
logpath=/data/mongo/log
#使用追加方式写日志
logappend=true
#以守护线程的方式运行,创建服务器进程
fork=true
#最大同时连接数
maxConns=100
#不启用验证
#noauth=true
#每次写入会记录一条操作日志
journal=true
#存储引擎有mmapv1、wiredTiger、mongorocks
storageEngine=wiredTiger
#访问IP
bind_ip=0.0.0.0
#用户验证
#auth=true
其中bind_ip=0.0.0.0是允许外部访问
④创建容器并启动
docker run -d -p 27017:27017 -v /data/mongo/data:/data/db -v /data/mongo/conf:/data/conf -v /data/mongo/log:/data/log --name mongo mongo:4.0
参考文章:https://blog.csdn.net/weixin_45345374/article/details/116271582