1. 程式人生 > >CentOS7下docker服務無法啟動的一般檢查

CentOS7下docker服務無法啟動的一般檢查

檢查步驟

啟動docker服務:
systemctl restart docker

這個時候會報錯,請進行以下步驟:
1. 找到報錯的型別,或者報錯的說明。
2. 檢查docker的配置檔案
3. 檢查磁碟空間
4. 檢查端口占用情況

步驟詳解

檢查報錯型別,檢視日誌:

journalctl -xe

檢查配置檔案,不同作業系統位置基本相同:

/etc/sysconfig/docker/

或者直接找到docker執行程式,一般會有相關配置檔案的預設路徑

檢查磁碟空間:

df -h

檢查端口占用:

netstat -anp

例項

報錯資訊如下:

-- Unit docker.service
has begun starting up. Dec 04 21:17:46 localhost.localdomain docker[7175]: time="2016-12-04T21:17:46.093155159+08:00" level=warning msg="/!\\ DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\" Dec 04 21:17:46 localhost.localdomain docker[7175]: time="2016-12-04T21:17:46.093322868+08:00"
level=fatal msg="listen tcp 172.17.0.1:2376: bind: cannot assign requested address" Dec 04 21:17:46 localhost.localdomain systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE Dec 04 21:17:46 localhost.localdomain systemd[1]: Failed to start Docker Application Container Engine. -- Subject: Unit docker.service
has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit docker.service has failed.

解決方案:

上一篇文章已經說過了簡單暴力的解決方案,就是清理/var/lib/docker這個目錄,重置設定。
然而,並不清楚具體原因。今天伺服器有斷電了,服務還是報錯。說明了一點,簡單暴力的手段並不是好的解決方案,治標不治本。這裡重新分析了先問題:

可以看到fatal msg”listen tcp 172.17.0.1:2376: bind: cannot assign requested address“,說的是綁定了一個埠,但是這個地址和埠又不能分配。

上一行大意“你要是不懂,就別瞎繫結埠”,囧。。

找了很久沒有在/var/lib/docker的目錄下找到關於2376埠bind的配置,思量半天,突然感覺是程式啟動的配置檔案,最後在/etc/sysconfig/docker目錄下找到了。額,這個是之前為了實現一個跟jenkins相關的功能繫結的,並不是瞎邦的。暫時註釋掉bind設定的這行,重啟服務。ok~

————————————-芥系分割線——————————————————-
2016/12/24 平安夜

之前遇到的這個問題又重新考慮了一遍,翻了翻docker remote api的官方文件,半年之間已經迭代了很多版本。

上文問題的提示再單獨拎出來,如下:

04T21:17:46.093155159+08:00" level=warning msg="/!\\ DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\"

翻譯:

04T21:17:46.093155159+08:00" level=warning msg="/!\\ 你要知道繫結IP地址前請先設定-tlsverify  /!\\"

具體什麼是tlsverify呢?字面意思就是TLS(Transport Layer Security)認證。通過證書授使只受信任的docker客戶端連線到伺服器。類似git裡的ssl授權客戶端一樣。

不設定tlsverify的話,預設的docker damen的無法開機啟動的。對於運維來說就是一場噩夢。