问题现象
某日运维人员反馈,说服务器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等操作就互相干扰,抛出上述错误了。
问题解决
问题分析解决思路分享出来供大家参考,有兴趣可以据此进一步研究,如果找到更完美的解决方法欢迎留言反馈,感谢关注!