# Docker 在 windows 10 WSL2安裝採坑紀錄 ###### tags: `docker` `wsl2` `windows` `linux` ` 工具安裝與部署` 最近想要直接在公司分配的window 10筆電直接安裝docker做Edge Device的佈署 預計在win10的Linux環境(WSL2)上直接安裝 ## Dcker安裝 ### 嘗試使用windows桌面版 [WSL|在 WSL2 中安装 Docker-Cynthia](https://cynthiachuang.github.io/Install-Docker-in-WSL2/) > 在 WSL2 中安裝 Docker 最常見的方法是採用 Docker Desktop for Windows,這種方式是利用了 Docker 的 Client/Server 架構,由 Windows 這邊負責 docker.sock,WSL2 中則是只有 Client 端,並利用 Windows 的 Docker Server 端進行通訊。 - 主要操作參考微軟官方的指引[在 WSL 2 上開始使用 Docker 遠端容器](https://learn.microsoft.com/zh-tw/windows/wsl/tutorials/wsl-containers) 1. 滿足必要條件 - [x] 請確定您的電腦正在執行Windows 10,更新為版本 2004組建18362或更新版本。 - 筆電的win10版本,確認符合版本要求(`Win + R`,輸入`winver`)  > 2004組建18362或更新版本 - [x] 安裝 WSL,並為在 WSL 2 中執行的 Linux 發行版本設定使用者名稱和密碼。 - [x] 安裝Visual Studio Code (選擇性) 。 這會提供最佳體驗,包括能夠在遠端 Docker 容器內撰寫程式碼和偵錯,並聯機到您的 Linux 散發套件。 2. Docker安裝 - 參考[Docker Desktop WSL 2 backend on Windows](https://docs.docker.com/desktop/windows/wsl/#download) 在下載 Docker Desktop桌面板進行安裝後馬上碰到問題 Docker Desktop桌面板錯誤提示  懷疑是公司筆電權限限制但無解 查詢相關資料後發現其實不是一定需要在windows環境安裝桌面版 > 決定直接進入Vscode進入開啟WSL模式直接用指令安裝在Ubuntu20.4內  ### 直接在在WSL使用指令模式安装Docker 我這邊是在已經運行好的WSL2環境,在Vscode的terminal中以指令安裝 依據官方文件指示[Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/) #### 使用repository進行安裝 第一次在新主機安装Docker Engine 前,需要設置Docker倉庫。之後就可以從中安裝和更新 ##### 設置repository 1. 更新apt package index and install packages,以允許apt通過HTTPS使用 ```bash sudo apt-get update sudo apt-get install \ ca-certificates\\ curl \\ gnupg lsb-release ``` 2. 添加Docker的官方GPG key。 ```bash sudo mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg ``` 3. 使用下面的命令來設置repository。 ```bash echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` ##### 安裝Docker Engine 1. 更新apt package index ```bash sudo apt-get update ``` :::warning 輸入 apt-get update 時收到 GPG 錯誤? 可能是默認umask可能配置不正確,導致無法檢測到版本庫的公鑰文件。在更新軟件包索引之前,嘗試授予Docker公鑰文件的讀取權限 ```bash sudo chmod a+r /etc/apt/keyrings/docker.gpg sudo apt-get update ``` ::: 2. 安裝Docker Engine、containerd和Docker Compose 安裝最新版本 ``` bash sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` 3. 運行hello-world image來驗證Docker引擎安裝是否成功 ``` bash sudo docker run hello-world ``` 我在這一步碰到問題,發現是docker沒有跑起來,因此以系統管理員身分進行啟動 ```bash sudo service docker start ``` 成功的話會看到下面的歡迎字樣  --- #### permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock 在執行`docker run -it ubuntu bash` 想要抓image使用時出現如下問題 無法連到Docker的常駐程式 >docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'. 點進這邊的問題指引 [I'm on Linux and get the error "connect EACCES /var/run/docker.sock"](https://github.com/microsoft/vscode-docker/wiki/Troubleshooting) 這是由於由於VS Code以非root用戶身份運行,需要按照[Linux post-installation steps for Docker Engine](https://docs.docker.com/engine/install/linux-postinstall/)中的 "以非root用戶身份管理Docker"的步驟,才能夠連接到docker #### 以非root用戶身份管理Docker設置 - [Linux post-installation steps for Docker Engine](https://docs.docker.com/engine/install/linux-postinstall/) 如何以非root用戶身分管理Docker,需要取得部分root 權限 :::spoiler > 這些可選的安裝後程序告訴你如何配置你的Linux主機以更好地與Docker一起工作。 > 以非root用戶身份管理Docker > Docker守護進程綁定到一個Unix socket,而不是一個TCP端口。默認情況下,root用戶擁有Unix socket,其他用戶只能用sudo來訪問它。 Docker守護進程總是以root用戶的身份運行。 > 如果你不想在docker命令前加上sudo,可以創建一個名為docker的Unix組,並將用戶加入其中。當Docker守護程序啟動時,它會創建一個Unix套接字,供docker組的成員訪問。在一些Linux發行版上,使用軟件包管理器安裝Docker引擎時,系統會自動創建這個組。在這種情況下,你不需要手動創建該組。 ::: 1. 建立docker群組 ```bash sudo groupadd docker ``` 2. 將用戶名加入docker群組 sudo usermod -aG docker $USER 3. 退出並重新登錄,啟用群組設定 如果在虛擬機中運行Linux,可能需要重新啟動虛擬機,使變化生效 也可以運行下面的命令啟動設定 ```bash newgrp docker ``` 設定好後重新執行`docker run -it ubuntu bash`指令就可以成功建立image了 - `-v 本機來源資料夾:docker目標資料夾` - 由於資料夾要掛載在本機上,因此加上 -v的設定 - 於筆電是用WSL連接本機資料夾,內含空格,因此加上'單引號讓特殊字元則僅為一般字元 (純文字) - image 名稱放在最後面 ```bash docker run --name openVino -it \ -v '/mnt/c/Users/11111024/OneDrive - Wistron Corporation/Documents/openVino':/openVino \ ubuntu:20.04 ```  ## 問題紀錄 ### docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.  - 情境 - 在vscode 以WSL2連線時,docker相關服務消失 - termimal 輸入`docker`指令可以執行 - 輸入`docker run hello-world`出現錯誤訊息docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? - 原因 - daemon service沒有在背景執行,需要重新啟動 - 解決方案 ``` sudo dockerd ``` - 結果 - 順利重啟 ## 參考資料 - Docker安裝文件。[Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/) - Docker安裝後設定。[Docker Desktop WSL 2 backend on Windows](https://docs.docker.com/desktop/windows/wsl/#download) - [WSL|在 WSL2 中安装 Docker_Cynthia](https://hackmd.io/@CynthiaChuang/Install-Docker-in-WSL2) - [wsl 2 是否需要启用 Hyper-V?](https://www.zhihu.com/question/439585675) - [5天-搞清楚為何 WSL2 需不需要 Windows Docker Desktop](https://ithelp.ithome.com.tw/articles/10235035) - [Does WSL2 docker need windows docker desktop?-Super User](https://superuser.com/questions/1583786/does-wsl2-docker-need-windows-docker-desktop)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up