0%

docker容器无法重启-网络未清理

[TOC]

现场

执行脚本

1
2
3
4
5
6
7
8
9
docker container rm -f user_service
docker run -d --restart=always\
--net=host\
--name user_service\
-v `pwd`/config/:/etc/config/\
-v /var/log/xiaoduo:/var/log/xiaoduo\
-v `pwd`:/app\
-w /app\
registry.cn-hangzhou.aliyuncs.com/xiaoduoai/centos7 /app/user_service -c /etc/config/user_service.toml

报错

1
/usr/bin/docker-current: Error response from daemon: service endpoint with name user_service already exists

首先明白报错信息的意思,具有名称用户服务的服务端点已经存在,指的是user_service这个入口名已经存在了。但是我的脚本明明是已经删除了user_service这个容器了的。而且这个脚本之前一直都是稳健运行的。

问网友

https://www.jianshu.com/p/bf7ae7919473

网友大概就是知道怎么解决,但是为什么会产生这个原因,并不知道,而且解决得相对有点粗放。

解决

在我的启动脚本中增加清理容器网络占用的指令

1
2
3
4
5
docker network disconnect --force host user_service

docker network inspect host | grep -A 5 -B 3 apigate

host表示容器启动时指定的网络模式(有4中网络模式,Bridge, Host, Containe, None这里不展开了)

修改后的完整指令如下

1
2
3
4
5
6
7
8
9
10
11
12
13
docker stop user_uservice
docker container rm -f user_service

docker network disconnect --force host user_service

docker run -d --restart=always\
--net=host\
--name user_service\
-v `pwd`/config/:/etc/config/\
-v /var/log/xiaoduo:/var/log/xiaoduo\
-v `pwd`:/app\
-w /app\
registry.cn-hangzhou.aliyuncs.com/xiaoduoai/centos7 /app/user_service -c /etc/config/user_service.toml

回顾

涉及到指令

  • 清理此容器的网络占用:docker network disconnect –force 网络模式 容器名称
  • 检查是否还有同名容器占用: docker network inspect 网络模式 | grep 容器名称

TODO

没有解决的问题:不知道是什么原因造成的,之前的指令在其他机器上都还是正常运行的。所以彻底解决得方案没有找到。