内核版本:3.10.0-123.el7.x86_64。
是它是它就是它,又是一个小冤家.
自从发现了简单安装Docker的方式,想着就不用苦逼的一个一个下载rpm安装了...就可以一边哼着歌一边把原来一天才能干完的活压缩到半天了.也的确有几次是这么爽的,但今天爽歪了。
像往常一样把Docker服务安装好,把需要的镜像从外网传到内网再load,再启动redis,mysql等项目需要的容器。真是一顿操作猛如虎,还带丝般顺滑。可应该怎么也启动不起来,查看日志是说链接不上MySql.去MySql容器中查看mysql服务是正常的,刚才还新建了数据库表的。难道启动容器时忘记添加-p参数或者端口映射错误了?赶紧检查下:
tianlang@tianlang-VirtualBox:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4217fc419fd daocloud.io/library/redis:5.0.4 "docker-entrypoint.s…" 4 months ago Up 23 hours 0.0.0.0:6379->6379/tcp redis
5855a5f7ec9a mysql:8 "docker-entrypoint.s…" 4 months ago Up 23 hours 0.0.0.0:13306->3306/tcp mysql8从docker ps信息可以看到容器时做了端口映射了的,端口也是正确的。难道是端口冲突映射时失败了?赶紧再检查下:
tianlang@tianlang-VirtualBox:~$ sudo netstat -anp|grep 13306
tcp 0 0 0.0.0.0:13306 0.0.0.0:* LISTEN 1785/docker-proxy
从netstat输出信息看端口也的确是docker监听了的。就是这么奇怪,什么看上去都正常但就是不能在宿主机上访问容器中的mysql.只有mysql容器是这样的吗?很遗憾redis也存在同样的问题,就是这么不幸。
看来是docker服务有问题了,尝试了使用rpm包重装,重启iptables,关闭防火墙,关闭selinux等等,一顿折腾,连不通的还是连不通。
博主刚开始也是一通折腾,后来确定是docker创建网桥时遇到了系统Bug,同时天涯踩Bug人啊!可以升级内核解决也可以使用brctl自己创建网桥分配给docker使用。
客户的机器升级内核不太可能了,只能尝试使用brctl创建网桥尝试最后一下子了.
1.关闭docker服务,添加网桥br0:
service docker stop //或者systemctl stop docker
brctl addbr br0
2.为网桥添加IP
ip addr add 172.16.0.1/24 dev br0
3.启用网桥br0
:
ip link set dev br0 up
4.修改docker默认网桥
在文件/etc/docker/daemon.json中添加:
{"bridge":"br0"}
5.启动docker服务
service docker start
6.重新创建新的容器测试
新创建的容器可以正常使用了.删掉原来的容器重新创建,也都可以正常使用了。要是一开始就先测试下宿主机能不能正常连通docker容器就可以少做些无用功了,草率了!!
博主文章中还记载了调试iptables等方法,这里就不再赘述了!