systemctl start docker一直卡住排查

記一次docker啓動卡住的排查經歷

問題描述

環境如下:

  • centos7.6
  • linux 3.10
  • docker任意版本

問題:yum安裝完docker之後systemctl start docker一直卡住,docker ps,docker images等都是卡住,strace發現都是卡住在網絡等待,排查docker daemon日誌沒有發現可疑點或者有異常日誌但隨着異常日誌排查並沒有解決問題,重裝docker,重啓設備未解決問題。

重啓系統,重裝docker都解決不了,決定花時間好好排查。

問題所在

找一臺docker正常運行的機器進行對比排查,以期能夠找到問題點

正常機器 systemctl status docker 結果如下:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-11-01 12:00:18 HKT; 4 days ago
     Docs: http://docs.docker.com
 Main PID: 28808 (dockerd-current)
   CGroup: /system.slice/docker.service
           ├─28808 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userl...
           └─28816 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/l...

異常機器 systemctl status docker 結果如下:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: activating (start) since Tue 2019-11-05 20:38:18 CST; 6s ago
     Docs: http://docs.docker.com
 Main PID: 449215 (dockerd-current)
   CGroup: /system.slice/docker.service
           ├─449215 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --user...
           ├─449268 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/...
           └─451211 /usr/sbin/iptables --wait -t nat -D PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

很顯然異常機器多了一條:

/usr/sbin/iptables --wait -t nat -D PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

ps查看,就是iptables卡死(處於D狀態):

ps aux | grep iptables
root     205480  0.0  0.0  18304   752 ?        D    20:54   0:00 /usr/sbin/iptables --wait -t nat -D PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

由上基本得出是iptables卡住導致docker卡住,這是docker啓動過程中要建立iptables策略爲後續docker網絡做準備,這個過程失敗導致卡住。

解決方案

iptables不能創建,基本上可以猜測是安全策略導致的。諮詢相關人員解決即可,比如我這裏是將/etc/modprobe.d/目錄下iptables和nat相關黑名單放開就可以了。

思考

想吐槽一句爲啥iptabes卡住在docker啓動日誌和調試日誌中看不到相關的日誌,害得花大量時間排查。
軟件設計過程中要考慮可維護性,除了問題要方便排查纔好。

發佈了45 篇原創文章 · 獲贊 10 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章