四时宝库

程序员的知识宝库

docker-comose down 网卡异常问题分析处理

问题现象

某日运维人员反馈,说服务器docker-compose操作报错了,大致情况:

在当前service目录下有docker-compose.yaml,其中有个nacos-server服务的配置定义。之前能正常通过docker-compose down/up命令正常关闭或启动服务。

但是突然有天执行 docker-compose down 抛出错误信息:

Stopping nacos-server ... done
WARNING: Found orphan containers (mysql, mq, redis) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Removing nacos-server ... done
Removing network service_default
ERROR: network service_default has active endpoints


问题分析

执行 docker network inspect service_default 查看网络配置,发现除了nacos-server本身,还多了几个关联容器:

按照网上查到的说法,执行命令断开容器关联:

docker network disconnect -f service_default mysql
docker network disconnect -f service_default redis
docker network disconnect -f service_default mq

在执行 docker network inspect service_default 确实发现相关关联容器定义没有了,然后执行docker-compose down命令正常执行没有ERROR信息了。

本以为万事大吉,可是没过几天运维反馈问题又重现了。那就继续吧:

然后通过docker inspect mysql等命令找到mysql容器相关配置信息,定位发现mysql/redis等其他几个貌似和当前nacos-server所在的docker-compose.yaml没啥关系的容器,是在另外一个目录下的service目录下的docker-compose.yaml中定义的。

按照docker-compose的默认规则:取当前docker-compose.yaml文件所属目录名再追加default标识作为所属network名字,由于nacos和mysql/redis/mq两个docker-compose.yaml所属目录都是service,所以默认都关联到service_default名称的network实例了。于是两个docker-compose.yaml进行down/up等操作就互相干扰,抛出上述错误了。

问题解决

通过上述分析,最简单粗暴的解决办法就是:把两个docker-compose.yaml所属名录改成不同名字,那就互补干扰了,算基本把问题解决了。当然按理说docker-compose层面应该会有相关参数来指定network名称等标识,具体就需要深入去研究一下docker/docker-compose的network机制了。

问题分析解决思路分享出来供大家参考,有兴趣可以据此进一步研究,如果找到更完美的解决方法欢迎留言反馈,感谢关注!


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接