看过我之前文章的小伙伴应该知道我的服务器是家里云,也就是一个用家用宽带的小主机,今天上午家里突然停电了,虽然不到10分钟就恢复了,但是在服务器重启后我发现好几个docker服务访问不了,看后台会发现这些服务都是停止状态。
包括本站,当我访问本站的时候Wordpress会报错没连接到数据库(当时只想着解决问题了,忘记截图了),在已停止的docker容器里果然发现了mysql。
当我尝试启动这些服务时,出现了报错Address already in ues
。
地址被占用?什么地址?我第一时间反应应该是IP地址,但是为什么之前不冲突现在一重启就不行了呢?
既然是占用冲突那就一个个找出来好了,我把所有容器都停掉,一个个手动启动,启动mysql时很顺利,mysql启动后我的图床也正常启动了(原来图床没启动不是因为冲突,而是mysql没启动)
正当我以为故障不能复现的时候,我启动了alist,然后又弹出了那个熟悉的报错Address already in ues
,然后关了mysql的容器alist就能启动了。
现在已经基本确定了就是mysql和alist有冲突,但是查看他们docker的ip,一个是172.17.0.4,一个是172.17.0.6这明明不冲突啊。
网上搜了一下类似的问题,都是把冲突的容器kill掉,然后启动另一个再启动这个就好了,但显然不适用于我这种情况,然后我就想既然冲突,那就让你俩走不同的网桥好了。
查看docker网桥命令
docker network ls
我的alist走的是1panel的网桥,现在我要单独创建一个
docker创建网桥命令
docker network creat --driver bridge --subnet 172.18.1.0/16 --getaway 172.18.1.0 alist_network
- --driver :指定链接模式,bridge是桥接
- --subnet :指定网段
- --getaway :指定网关
容器运行时指定网桥命令
docker run -d -p 外部端口:内部端口 --name 镜像名 容器名
这下再启动alist就不报错了
除此之外我还发现有些容器自己没问题,但是因为mysql没启动直接被“逼停了”,针对这种情况可以在docker-compose.yml
加上depends_on
参数,在指定容器启动后再启动。
或者也可以关掉全部容器的自动重启,直接在宿主机的rc.local
开机启动文件里手动一个个启动
#rc.local
#等待docker启动
sleep 15s
#逐一启动容器
docker start 容器1
sleep 1s
docker start 容器2
#以此类推
Comments NOTHING