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-comose down 網絡卡異常問題分析處理

按照網上查到的說法,執行命令斷開容器關聯:

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機制了。

問題分析解決思路分享出來供大家參考,有興趣可以據此進一步研究,如果找到更完美的解決方法歡迎留言反饋,感謝關注!