修改虚拟机静态ip的坑(与docker有关)
由于我换了个移动wifi,我想把自己电脑上的虚拟机的静态ip也更改一下,但是改完静态ip之后我发现我可以ping得通我的虚拟机ip,但是用telnet命令访问我的3306端口却访问不通了,以至于我连不到我的mysql。
一、问题排查思路
首先由于我的虚拟机里面的软件都是用docker安装的,所以我就用
docker ps
来查看我的运行中的容器
然后发现其实我的容器都是正常启动的,但是通过我自己的主机死活连接不上我虚拟机里面的mysql,于是我就想是不是防火墙原因
systemctl status firewalld.service
通过上面的命令发现我的防火墙根本就没有开。
我在外网用下面的命令测试连接虚拟机与虚拟机中的mysql.
ping 虚拟机的ip 这里是可以ping的通的
telnet 虚拟机ip 3306 发现还是访问不通我的mysql
没办法,再用浏览器链接试一下我安装的kibana容器。
发现kibana也用不了。此时我就把问题矛头指向了我的docker,怀疑是不是重新配置了虚拟机的静态ip之后要把docker重启一下,因为docker应该是有一个代理容器ip与宿主机ip的过程。于是我就用下面的命令重启了我的docker。
sudo systemctl restart docker
果然,重启了docker之后通过我的主机就可以连接上我虚拟机里面的mysql了。
但是我的kibana还是连不上,还是比较纳闷。而且通过我的主机telnet访问kibana是可以访问得通的,但是浏览器还是访问不到。
没办法,只能看一下kibana的启动日志了。
docker logs kibana的容器id
发现如下情况
{"type":"log","@timestamp":"2023-10-31T06:29:53Z","tags":["warning","elasticsearch","admin"],"pid":7,"message":"Unable to revive connection: http://172.20.10.11:9200/"}
{"type":"log","@timestamp":"2023-10-31T06:29:53Z","tags":["warning","elasticsearch","admin"],"pid":7,"message":"No living connections"}
顿时又恍然大悟了,kibana想要链接我的elasticsearch,但是连得还是以前的ip,于是需要修改kibana的配置
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.20.10.11:9200 -p 5601:5601 \
-d kibana:7.4.2
172.20.10.11为自己的虚拟机ip ifconfig命令查看
这是之前绑定启动kibana容器与elasticsearch的命令,所以得修改容器,我询问chatgpt得得到如下结论。
使用 Docker 运行容器时,你可以使用 docker update
命令来更改容器的配置。不过,这个命令不支持更改容器的主机端口映射。
如果需要更改容器端口映射,你需要删除原先的容器,并重新创建一个新的容器来实现更改。以下是大致的步骤:
-
停止并删除现有的 Kibana 容器:
docker stop kibana docker rm kibana
-
使用新的命令重新运行 Kibana 容器,并更新 Elasticsearch 的地址:
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://NEW IPADDR -p 5601:5601 \ -d kibana:7.4.2
大功告成。
二、总结
通过以上情况问题我总结了我的几个结论观点:
- 重新配置了虚拟机的静态ip之后如果之前是使用docker安装的mysql等容器,需要重启docker与容器。dkcoer应该是有一个代理宿主机与容器之间的一个ip。
- kibana容器启动的时候一般是基于安装的elasticsearch的。静态ip修改了之后kibana自然也得重新绑定,这里是借鉴的gpt的说法删除容器之后,重新绑定启动的一个新的kibana
a容器启动的时候一般是基于安装的elasticsearch的。静态ip修改了之后kibana自然也得重新绑定,这里是借鉴的gpt的说法删除容器之后,重新绑定启动的一个新的kibana - 解决问题的步骤无非就是先看容器是否启动,然后再看防火墙是否设置了端口权限,再重启容器查看启动日志,最后再定位问题。