CentOS马上要退出历史的舞台了,能换Ubuntu就换Ubuntu吧….

为啥我要维护这老CentOS服务器 :(

  1. CentOS6不能使用docker
  2. Build出问题(在其他电脑上可以build)。官方源docker版本太低。
  3. network无法访问。CentOS的内核版本古老,容易出问题。

解决方案

CentOS6早已停止维护,就没啥可说的了。后面两个问题还是可以挽救。2可以通过使用docker-ce源解决。3可以通过更新内核+重启解决。

但是下面还是得额外讲一下问题3的解决办法,更新内核生效需要重启服务器,对于生产环境的服务器并不可以随便重启。

问题3解决方案

特征:使用host模式没有问题(必然)。但是使用bridge模式的network,宿主机不能ping通容器,容器也不能ping通宿主机(因特网就更加不可能),但是同个network下的容器可以互相ping。

如上,这是CentOS的内核版本问题。这里讲述的就是不更新内核修复问题的办法。

重建网卡

因为内核中的网桥模块加载失败,众所周知docker创建bridge模式的network会创建一个网桥(与服务器的网卡NAT转发,相当于共享服务器的网卡上网)。
既然模块坏了,网桥创建也就出了问题(docker仍然会创建网桥,但是那个网桥是有问题的)。因此,就需要手动创建网桥。

安装bridge-utils软件,使用brctl show查看所有网桥。如果网桥后面的interface含有一些虚拟网卡(veth开头)。如下,那就记录下网桥的名称(docker0是docker的默认网桥,不指定network时就会使用)。如果该网桥ID为8000.000000000000则代表该网桥不正常。

样例

停止docker服务,关闭网桥,如:ip link set dev br-xx down

删除网桥: brctl delbr br-xx

新建网桥: brctl addbr br-xx

启用网桥 ip link set dev br-xx up

启动docker服务。