在使用 WSL 的 ubuntu-20.04 linux 子系統初學安裝和使用 docker 時遇到了這個問題
我之前從 Microsoft Store 中下載了 ubuntu-20.04 的子系統嘗鮮。
在后期學習 docker 的時候,想把 docker 安裝到 linux 子系統里。
於是使用“菜鳥安裝”的方式,把 docker 安裝到了 WSL 的 linux 里面,即使用了命令:
$ apt-get update $ wget -qO- https://get.docker.com/ | sh
安裝完成后使用命令檢查,就出現了問題
$ docker version
Client: Docker Engine - Community
Version: 20.10.6
API version: 1.41
Go version: go1.13.15
Git commit: 370c289
Built: Fri Apr 9 22:47:17 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
$ _
提示以上錯誤信息,發現 docker 服務根本起不來,只有客戶端是活着的。
去找了很多答案都和我的問題不符,也沒法解決。關鍵點在於我使用了 WSL 的 linux 子系統,情況可能比較特殊。
之后,先是找到了 windows 10 對於 WSL 的官方文檔指導 文檔 。
在疑難解答的位置被指引到了另外一篇文章: windows 10 上的如何在適用於 Linux (WSL2)的 Windows 系統中設置 Docker 。
這篇文章作者對比說明了 WSL1 和 WSL2 的一些問題(其實是着重推薦了一波 WSL2)。
在翻閱文章的過程中,又被導引到了 Docker 官方文檔對於 WSL2 的操作說明 Docker Desktop WSL2。
官方文檔中說明 docker 目前對 WSL2 的支持已經非常完備了,並且強烈推薦使用 WSL2 來配合 docker 使用,這也是官方推薦的最佳方式。
這時我就想到是不是因為使用“菜鳥安裝”腳本的最新版本 docker 和我的 WSL 版本不匹配造成的。因為我嘗鮮 WSL 子系統比較早,那時候可能用的還不是 WSL2 。
於是我根據安裝指南中的操作,對 WSL 執行檢查:
C:> wsl.exe -l -v NAME STATE VERSION * Ubuntu-20.04 Running 1 docker-desktop-data Running 2 docker-desktop Running 2
結果發現我的 ubuntu20.04 是 WSL1 而不是 WSL2 ,是不是這個問題還不確定,但是我還是決定先升級 WSL2 試試看:
C:> wsl.exe --set-version ubuntu-20.04 2 正在進行轉換,這可能需要幾分鍾時間... 有關與 WSL 2 的主要區別的信息,請訪問 https://aka.ms/wsl2 轉換完成。
升級過后在 Windows Terminal 中重新打開 ubuntu-20.04,再次運行 docker version 檢查,發現仍然有問題。
然后我重新啟動 docker,並檢查 docker 的運行狀態,發現 docker 可以正常啟動了,問題解決。
總結:問題原因是 docker 版本和 WSL2 版本都太新,很多人應該還沒有遇到這樣的情況。如果你在 windows 10 1909 之前就嘗鮮過 WSL,
你安裝的 linux 子系統一定是 WSL1 的,那么很有可能你也會遇到這個問題。不妨先用 wsl.exe -l -v 命令檢查一下 WSL 的版本。
WSL2 是在 1909 之后微軟才推出的,所以需要把 WSL1 文件系統升級到 WSL2 即可解決問題。
2021年4月15日00點15分 ——codingR