[Windows] WSL
===
> Windows Subsystem for Linux
###### tags: `OS`
###### tags: `OS`, `Ubuntu`, `linux`, `command`, `docker`, `docker-compose`
<br>
[TOC]
<br>
## 安裝方式
```cmd=
REM 打開 Windows PowerShell (系統管理員)
> wsl -h
REM 列出線上 Ubuntu 版本
> wsl --list --online
以下是可安裝之有效發佈的清單。
使用 'wsl --install -d <Distro>' 安裝。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
openSUSE-42 openSUSE Leap 42
SLES-12 SUSE Linux Enterprise Server v12
Ubuntu-16.04 Ubuntu 16.04 LTS
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
REM 列出本地端 Ubuntu 版本
> wsl --list
> wsl --install -d Ubuntu-20.04
REM [1] 重開機
REM [2] 打開 Windows PowerShell,輸入 wsl
```
### 安裝結果


### 參考資料
- [[官方文件][zh] 安裝 WSL](https://docs.microsoft.com/zh-tw/windows/wsl/install)
- [[官方文件][zh] Install WSL](https://docs.microsoft.com/en-us/windows/wsl/install)
- [介紹好用工具:WSL (Windows Subsystem for Linux)](https://blog.miniasp.com/post/2019/02/01/Useful-tool-WSL-Windows-Subsystem-for-Linux)
<br>
## 操作
### 確認 Ubuntu 版本
```
wsl -d Ubuntu -- cat /etc/os-release
wsl -d Ubuntu -- lsb_release -a
```
### 啟動
輸入 `wsl` 或是 `ubuntu2004`


<br>
### Linux OS 在 Windows 中的檔案位置
- 列出磁碟機
```
$ ls /mnt
c d e g wsl
```
- [跨 Windows 和 Linux 檔案系統運作](https://docs.microsoft.com/zh-tw/windows/wsl/filesystems)
```
\\wsl$
```
<br>
## 安裝 Docker Desktop
> - 企業需要付費
> - [Windows Docker 安装](https://www.runoob.com/docker/windows-docker-install.html)
> Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式,这个方法依然属于先在虚拟机中安装 Linux 然后再安装 Docker 的方法。
### 未安裝前,使用 docker 的錯誤訊息
> Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
> Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
<br>
### 下載 Docker Desktop 並安裝
1. https://www.google.com/search?q=Docker+Deskto

2. 下載 windows 版:[Docker Desktop Installer.exe](https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe?utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=module)
> 482MB
3. 點擊執行



底下是哪邊來的圖片?

### 參考資料
- Google
- `docker wsl` -> [Docker Desktop WSL 2 backend](https://docs.docker.com/desktop/windows/wsl/)
- `docker desktop for windows` -> [Docker Desktop for Windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows)
- [Docker not running on Ubuntu WSL due to error cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? [closed]](https://stackoverflow.com/questions/61592709/)
- [A Linux Dev Environment on Windows with WSL 2, Docker Desktop](https://nickjanetakis.com/blog/a-linux-dev-environment-on-windows-with-wsl-2-docker-desktop-and-more)
- [Docker Desktop WSL 2 backend](https://docs.docker.com/docker-for-windows/wsl/)
<br>
## 安裝 Docker runtime
> 包含 Docker-compose
### 安裝資訊
- [Run Docker in WSL2 in 5 minutes (via systemd, without Docker Desktop!)](https://dev.to/klo2k/run-docker-in-wsl2-in-5-minutes-via-systemd-without-docker-desktop-28gi)
### trouble shooting
- ### error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not found in $PATH, out: ``
```
$ docker-compose up
[+] Running 0/0
⠋ llm_iambackend Pulling 0.0s
⠋ llamacpp_server Pulling 0.0s
⠋ llm_portal Pulling 0.0s
⠋ llm_nginx Pulling 0.0s
error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not found in $PATH, out: ``
```
- solution
- [Docker-credential-desktop.exe executable file not found in $PATH using wsl2](https://forums.docker.com/t/docker-credential-desktop-exe-executable-file-not-found-in-path-using-wsl2/100225/5)
```
In ~/.docker/config.json change credsStore to credStore
```

<br>
## 在新版 Ubuntu 上,安裝常用軟體
```bash
# 安裝 tree
sudo apt update; apt install -y tree
# 安裝 Miniconda3
$ curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ bash Miniconda3-latest-Linux-x86_64.sh
# 註冊 conda 路徑:
$ conda list
conda: command not found
$ nano ~/.bashrc
# 2021.12.02, miniconda
PATH="$PATH:/home/tj/miniconda3/bin"
$ source ~/.bashrc
# 或是開新的 terminal 就生效
```
- [[HackMD] 安裝 node 指令](https://hackmd.io/ioPaKTHcTVOkDyJXraPYLA?both#如何在-Ubuntu-上安裝-node-指令-Nodejs-≥-20-?)
<br>
## 參考資料
- ### [[推薦] WSL (Windows Subsystem for Linux) 安裝與使用教學](https://xenby.com/b/226-推薦-wsl-windows-subsystem-for-linux-安裝與使用教學)
- ### [在 Windows 10 環境上安裝 WSL 2](https://www.huanlintalk.com/2020/02/wsl-2-installation.html)
- ### [比較 WSL 1 和 WSL 2](https://docs.microsoft.com/zh-tw/windows/wsl/compare-versions)
<br>
## 討論
### wsl 要如何更新 ubuntu?現況:ubuntu20.04,想要升到最新
- ### 建議解法
- 如果只是用 python 或 conda,建議直接裝最新的
- ### gpt-5.4 (2026/04/17)
可以,但 **不建議直接硬跳「最新」**。
在 WSL 裡,**Ubuntu 20.04 通常要一版一版升**,也就是:
`20.04 -> 22.04 -> 24.04 -> (再看是否有更新版可升)`
而且在 WSL 環境,我會更推薦你優先考慮這兩種做法:
1. **最穩定**:新裝一個新版 Ubuntu,再搬資料
2. **原地升級**:20.04 先升到 22.04,再升到 24.04
我剛剛嘗試查官方最新文件,但目前外部查詢工具異常,沒法即時驗證「此刻最新可升到哪一版」。所以以下先給你 **安全、實務上可用** 的做法;若你要,我下一則也可以幫你整理成「可直接複製貼上」版。
---
### 我建議的做法:先備份,再升級
#### 0. 在 Windows 先確認 WSL distro 名稱
用 PowerShell:
```powershell
wsl -l -v
```
你會看到類似:
```powershell
NAME STATE VERSION
* Ubuntu Running 2
```
假設名稱是 `Ubuntu`。
---
### 1. 先備份整個 WSL Ubuntu
這很重要。萬一升壞,可以還原。
在 PowerShell:
```powershell
wsl --shutdown
wsl --export Ubuntu D:\backup\ubuntu20-backup.tar
```
---
### 2. 先更新 WSL 本身
在 PowerShell(建議系統管理員):
```powershell
wsl --update
wsl --shutdown
```
---
### 3. 進入 Ubuntu 20.04,先把現有套件更新乾淨
```bash
sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove -y
sudo apt autoclean
```
再確認升級工具有裝:
```bash
sudo apt install update-manager-core -y
```
檢查設定:
```bash
cat /etc/update-manager/release-upgrades
```
通常要看到:
```ini
Prompt=lts
```
如果不是,可改成:
```bash
sudo nano /etc/update-manager/release-upgrades
```
改成:
```ini
Prompt=lts
```
---
### 4. 從 20.04 升到 22.04
```bash
sudo do-release-upgrade
```
如果它說找不到新版本,可試:
```bash
sudo do-release-upgrade -d
```
但 `-d` 通常只在新版本剛開放、正式升級通道尚未全面打開時才考慮,用前要更小心。
升完後重開 WSL:
在 PowerShell:
```powershell
wsl --shutdown
```
再進 Ubuntu 檢查版本:
```bash
lsb_release -a
cat /etc/os-release
```
---
### 5. 再從 22.04 升到 24.04
先再次更新乾淨:
```bash
sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove -y
```
然後再跑:
```bash
sudo do-release-upgrade
```
升完再確認版本:
```bash
lsb_release -a
```
---
### 更推薦的方式:直接新裝新版 Ubuntu,再搬資料
如果你不想冒原地升級風險,這方法通常更乾淨。
#### 作法
在 PowerShell:
```powershell
wsl --install -d Ubuntu
```
或到 Microsoft Store 安裝新的 Ubuntu 發行版。
安裝完後,在舊的 Ubuntu 裡把資料複製到 Windows 目錄,或直接透過:
```powershell
\\wsl$
```
去搬家。
你也可以把舊的 Ubuntu 保留一陣子,確認新環境沒問題再刪。
---
### 什麼情況下,我會建議你「不要原地升級」
如果你有以下情況,建議直接新裝新版:
* 這個 WSL 環境已經用了很久,裝了很多套件
* 有改過很多 system config
* 有第三方 source / PPA
* 你其實只在意開發環境與資料,不在意保留整個舊系統狀態
---
### 升級前你要特別注意
#### 1. 第三方 PPA
先看有沒有額外 source:
```bash
ls /etc/apt/sources.list.d/
```
有些 PPA 會讓升級失敗。
#### 2. Python / Docker / Node / CUDA 類環境
這些常常在大版本升級後要重整。
#### 3. WSL 不等於完整 systemd Linux
雖然現在 WSL 已較完整,但某些服務型套件升級時,表現仍可能和實體 Ubuntu 不完全一樣。
---
### 最實際的建議
如果你是一般開發用途,我建議你選:
**方案 A:新裝新版 Ubuntu + 搬資料**
最乾淨、最穩。
如果你一定要保留現有環境:
**方案 B:20.04 -> 22.04 -> 24.04 逐步升級**
不要直接亂改 sources 跳版本。
---
### 最後給你一個精簡版流程
#### Windows PowerShell
```powershell
wsl -l -v
wsl --shutdown
wsl --export Ubuntu D:\backup\ubuntu20-backup.tar
wsl --update
wsl --shutdown
```
#### Ubuntu 20.04
```bash
sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove -y
sudo apt install update-manager-core -y
sudo do-release-upgrade
```
#### 升到 22.04 後,再跑一次
```bash
sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove -y
sudo do-release-upgrade
```
<br>
### wsl 如何切換 OS ?
- ### Question
```
(base) C:\Users\User>wsl --list
Windows 子系統 Linux 版發佈:
Ubuntu-20.04 (預設)
docker-desktop-data
Ubuntu
docker-desktop
```
如何開啟 Ubuntu ??
- ### gpt-5.4 (2026/04/17)
可以,直接這樣開。
你現在有兩個 Ubuntu:
* `Ubuntu-20.04`(目前預設)
* `Ubuntu`
所以有幾種開法。
### 1. 開啟預設的 Ubuntu
你目前預設是 `Ubuntu-20.04`,所以直接輸入:
```powershell
wsl
```
這樣就會進入 `Ubuntu-20.04`。
---
### 2. 指定開啟某一個 Ubuntu
#### 開 `Ubuntu-20.04`
```powershell
wsl -d Ubuntu-20.04
```
#### 開 `Ubuntu`
```powershell
wsl -d Ubuntu
```
Microsoft 的 WSL 指令支援用 `--distribution` / `-d` 指定要啟動哪個發行版。
---
### 3. 想把 `Ubuntu` 改成預設
如果你之後希望輸入 `wsl` 就直接進 `Ubuntu`,可先設定:
```powershell
wsl --set-default Ubuntu
```
之後再輸入:
```powershell
wsl
```
就會進 `Ubuntu`。
---
### 4. 查看目前哪個是預設
```powershell
wsl -l -v
```
有標示「預設」的那個,就是 `wsl` 直接進去的目標。
---
### 你現在最直接可以試的
先輸入:
```powershell
wsl
lsb_release -a
```
如果你是想開新版那個 Ubuntu,輸入:
```powershell
wsl -d Ubuntu
```
<br>
{%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}