一、操作系统重启后docker自定义网络会丢失

如题所示,统信UOS服务器版重启后docker自定义网络会丢失。这真是很无奈的一件事情,之前我在centos7或centos8下,创建了docker自定义网络,重启操作系统后,这些自定义网络还好好的,岿然不动。但统信UOS的服务器版不是,重启后就消失了,导致使用这个网络创建的docker都无法启动。

创建一个docker自定义网络

sudo docker network create \
  --driver bridge \
  --subnet=172.18.0.0/24 \
  --gateway=172.18.0.1 \
  docker-fixed-net

创建使用该网络的容器

sudo docker run --restart=always -d -it --name=outer-api \
--network docker-fixed-net \
--ip 172.18.0.6 \
-p 8091:8091 \
-v /home/work/docker/outer-api:/usr/data \
outer-api:1.0.0

这时检查,有网络。但重启后就没有了。
在这里插入图片描述在这里插入图片描述

二、为什么要用自定义网络

docker本身有个默认的网络(172.17.0.*),创建容器的时候不指定即使用该默认网络,然后容器创建之后,获得一个ip,比如172.17.0.2。问题是,这个ip不是固定的,如果我们创建了多个容器,docker重启以后,这些容器的ip有可能会互相调换。这个调换没有什么规律可言,谁先启动谁得到靠前的ip。

这样就会给容器之间的互相引用带来麻烦。默认情况下,容器都在172.17.0.*网段,互相之间可以通过ip引用,而不必通过宿主机IP + 映射端口的方式来引用,避免宿主机要在防火墙上开放一大堆端口,从而带来安全隐患。但ip会变就扯犊子了。

使用自定义网络可以解决这个问题,ip不会变,并且在创建容器时可以指定ip,不用等到容器创建之后才知道给分配了个啥地址。

sudo docker run --restart=always -d -it --name=outer-api \
--network docker-fixed-net \
--ip 172.18.0.6 \
-p 8091:8091 \
-v /home/work/docker/outer-api:/usr/data \
outer-api:1.0.0

三、应对之道

但比较扯的是,我们服务器安装了统信UOS服务器版(1070e),发现操作系统重启以后,自定义网络就没有了。搞来搞去,也搞不定是啥原因,暂时只能承认这个现实。然后在此基础上,想想怎么应对。

查阅资料,得到的办法是:
1)重启以后,重新创建自定义网络
2)将容器连接到自定义网络
3)启动容器

其实就几行脚本的代价。容器也没有丢。

1、重新创建自定义网络

sudo docker network create \
  --driver bridge \
  --subnet=172.18.0.0/24 \
  --gateway=172.18.0.1 \
  docker-fixed-net

2、将容器连接到自定义网络

sudo docker network connect docker-fixed-net redis01
sudo docker network connect docker-fixed-net nginx-web-i
sudo docker network connect docker-fixed-net web-server-i
sudo docker network connect docker-fixed-net data-sync
sudo docker network connect docker-fixed-net outer-api
sudo docker network connect docker-fixed-net srs6

3、启动容器

sudo docker start redis01
sudo docker start nginx-web-i
sudo docker start web-server-i
sudo docker start data-sync
sudo docker start outer-api
sudo docker start srs6

这些脚本,可以重启后手动执行,不过1、2秒功夫;将这些脚本,放到一个批处理文件,系统重启后自定执行应该也可以。但放在哪里才能自动执行,还没试,先记录下来。

更多推荐