Bug:突然连接不上docker中的mongo

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删除所有容器

  1. 修改配置文件
vim /etc/sysctl.conf

"在文件中添加下面的配置"
net.ipv4.ip_forward=1    #添加此行配置

注:也可修改此文件:/usr/lib/sysctl.d/00-system.conf

  1. 重启服务
systemctl restart network && systemctl restart docker
  1. 查看是否修改成功
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 端口号是否被占用

  1. mongo端口(27017)是否被占用
netstat -ano | grep 27017

在这里插入图片描述

  1. 通过端口号,反查进程
lsof -i:端口号
netstat -tunlp | grep 端口号

两条命令皆可【ps -ef | grep 27017特殊情况也可以】
在这里插入图片描述
其中第一个是PID(进程号)

  1. 通过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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值