Linux服務器安裝Docker,啟動失敗問題的解決

背景

Docker啟動失敗的原因和使用瞭阿裡雲的源有關。

如果大傢有使用到阿裡雲的源倉庫,可以繼續看下是否也可以解決問題。

啟動失敗

在Linux服務器上安裝docker,執行docker 和docker version沒有問題。

但是執行docker images等命令報錯,按照提示首先

執行:systemctl status docker

可以看到,報錯信息為“無法啟動Docker應用的容器引擎”,這裡其實隻能看到啟動失敗,狀態為failed,沒有更多提示信息。

查看具體報錯 & 解決

執行命令:dockerd

這時,我們發現已經找到瞭正確的debug方式瞭:這裡報錯的具體信息為“啟動守護進程時,初始化graphdriver失敗:overlay2.override_kernel_check選項未知”。

這時我們需要去daemon的json配置文件:/etc/docker/daemon.json,將stroage-driver替換一下。

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
    "log-opts": {
      "max-size": "100m"
    },
    "storage-driver": "overlay2",
    "storage-opts": [
      "overlay2.override_kernel_check=true"
    ]
    ## 替換成下面
    "storage-driver": "overlay"
}

然後嘗試啟動docker:systemctl start docker ,同樣用dockerd命令看到有以下錯誤:

這裡意思是:

“守護進程初始化網絡控制器報錯:地址列表沒有可用的IP”。

這是為什麼呢?這是因為Docker會檢查bridge list裡的IP,如果發現有和服務器或者路由表IP有重疊,就會丟棄該IP,導致報錯。

這時,我們查看阿裡雲服務器路由表:route -n

可以看到,172網段其實是和Docker的list bridge裡有重疊。

所以我們可以手動增加網卡,如圖中所示:

sudo ip link add name docker0 type bridge
sudo ip addr add dev docker0 172.17.0.1/16

再重啟docker應該就可以瞭:systemctl start docker

設置docker開機自啟動:systemctl enable docker            

總結

我這邊遇到的問題和解決方法就是上面這樣。

也可以參考這篇文章:https://www.jb51.net/article/280108.htm

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: