解决不了虚拟机挂起后docker0 IPv4地址消失的问题,唯一的做法是重启docker,让其重新建立docker0;
一、问题描述
docker查看运行的容器
连接测试
首次连接正常
……
Ubuntu挂起后再次打开发现无法访问
……
nacos在Ubuntu采用容器IP:172.17.0.3访问
mysql在MacOS本机采用Ubuntu虚拟机IP:10.211.xx.xx访问
查看docker网卡发现IPv4消失
二、问题解决方案
禁用IPv6
1.在操作系统禁用IPv6
1)可以通过禁用 sysctl 设置,无需重新启动即可应用。 现在修改系统配置文件:
#编辑配置文件
vim /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
#当使用 Docker 容器时,如果要实现容器与外部网络之间的通信,IP 转发也可能会有用
net.ipv4.ip_forward = 1
#配置文件生效
sudo sysctl -p
2)禁用内核模块
#通过运行以下命令确保所有系统包都是最新的 apt 终端中的命令
sudo apt update
sudo apt upgrade
nano /etc/default/grub
添加以下文件:
GRUB_CMDLINE_LINUX="crashkernel=auto ... ipv6.disable=1"
一旦完成更改我们重建的任何内核参数 grub.cfg 通过更新-grub2:
sudo update-grub2
sudo shutdown -r now
测试若返回1则成功禁用
parallels@ubuntu-linux-22-04-desktop:~$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
2.禁用docker服务的IPv6
3.禁用daemon文件里的IPv6
vi /etc/docker/daemon.json
4.最终解决方案
修改/etc/NetworkManager/NetworkManager.conf
sudo vim /etc/NetworkManager/NetworkManager.conf
添加以下内容
[keyfile]
unmanaged-devices=interface-name:docker*;interface-name:veth*;interface-name:br-*;interface-name:vmnet*;interface-name:vboxnet*
重启服务
systemctl restart NetworkManager.service