Windows 的 WSL 遇到 apt: not found

因為在 Windows 裡安裝了 docker, 所以在 command mode 輸入 wsl 可以進入 linux, 但實際上這是 docker 使用的 linux, 沒有 apt 指令, 所以輸入 apt 指令, 會顯示錯誤訊息:

YAO-NB:/mnt/host/c/Users/max32# apt
-sh: apt: not found

確認您是否進入了 WSL Linux 環境

請在您當前的命令列視窗中輸入以下命令:

wsl
  • 如果成功: 它會將您帶入您預設的 Linux 發行版。
  • 如果失敗: 請嘗試直接從 Windows 的開始選單啟動您的 WSL 發行版(例如點擊 Ubuntu 圖示)。

檢查您的發行版和 Shell

進入 WSL 後,執行以下命令:

  1. 檢查發行版名稱:Bashcat /etc/os-release
    • 如果您看到 NAME="Ubuntu"NAME="Debian GNU/Linux",那麼您應該可以使用 apt
  2. 確認 apt 是否存在:Bashwhich apt
    • 如果輸出 /usr/bin/apt (或類似路徑), 則表示 apt 存在,問題是路徑 (Path) 設定不正確。
    • 如果輸出找不到, 則您使用的發行版可能不是基於 Debian 的,請回到上面的 可能性 2 判斷。

如果是 docker 話,

YAO-NB:/mnt/host/c/Users/max32# cat /etc/os-release
PRETTY_NAME="Docker Desktop"

這個資訊非常關鍵

您目前所在的環境並不是您通常安裝應用程式的標準 Linux 發行版(例如 Ubuntu 或 Debian),而是 Docker Desktop 在 WSL 2 中運行的內部虛擬機或環境

輸出顯示:

PRETTY_NAME="Docker Desktop"

這個 Docker Desktop 專用的 WSL 虛擬機是用來執行 Docker 服務 (Docker Engine) 的,它是一個高度精簡、為單一目的(運行 Docker)而設計的 Linux 環境。

🚨 結論:這個環境沒有 apt

由於這個 Docker 專用的環境是極度精簡的,它通常不包含aptyumdnf 這樣的標準套件管理工具,因為它的設計目的不是讓使用者在裡面安裝軟體,而是專門用來運行 Docker 引擎。

💡 您真正想做的事情是什麼?

您想要使用 apt 安裝軟體,這表示您可能想做以下其中一件事:

  1. 在您的主要 WSL Linux 環境中安裝開發工具(例如 Git, Python, Zsh)。
  2. 在 Docker 容器內部安裝東西(例如在 Dockerfile 中)。

🛠️ 解決方案:如何回到您的主 WSL 環境

您需要退出當前的 Docker Desktop 內部環境,然後進入您安裝的 UbuntuDebian 發行版。

啟動您的標準 WSL 發行版

從 Windows 的 PowerShell 或 CMD 終端機中,輸入您發行版的名稱來啟動它。

A. 如果您安裝了 Ubuntu (最常見):

ubuntu

wsl -d Ubuntu

B. 如果您安裝了其他發行版(例如 Debian):

debian

wsl -d Debian

驗證並使用 apt

進入您正確的 Linux 環境後,您的提示符號會變成類似 max32@YAO-NB:~$ 的形式。

此時您就可以正常使用 apt 了:

sudo apt update
sudo apt install <您想安裝的套件>

快速確認:

您可以在新的 Shell 中再次執行 cat /etc/os-release,這次應該會看到類似以下輸出:

NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
...

要如何知道安裝幾個 linux?

執行指令:

wsl --list --verbose

我的環境已經成功安裝了 ubuntu,

PS C:\Users\max32> wsl --list --verbose
  NAME              STATE           VERSION
* docker-desktop    Stopped         2

根據您的輸出:

 NAME              STATE           VERSION
* docker-desktop    Running           2
  Ubuntu            Running           2

這表示您的系統現在已經同時安裝了並且 正在運行 兩個 WSL 發行版:

  1. docker-desktop (Docker 專用環境)
  2. Ubuntu (您現在可以安裝軟體的標準 Linux 環境)

🚀 WSL 環境切換的方法

在 PowerShell 或 CMD 中,您可以使用 wsl -d 命令來切換並啟動特定的發行版。

1. 進入 Ubuntu 環境 (使用 apt)

要使用 apt 安裝軟體,您需要進入 Ubuntu 發行版。

  • 在您的 PowerShell 提示符號 (PS C:\Users\max32>) 後面輸入:
    wsl -d Ubuntu
    • -d (或 --distribution) 參數告訴 wsl 啟動特定的發行版名稱。
  • 預期結果:
    • 提示符號會切換到 Ubuntu 的 Shell 格式 (例如 max32@Your-PC:~$)。
    • 現在您可以正常使用 apt 了!
    Bashsudo apt update sudo apt install git # 範例:安裝 Git

2. 進入 docker-desktop 環境 (通常不需要)

如果您想切換回 Docker 的內部環境,則使用:

wsl -d docker-desktop

3. 設定預設啟動的發行版 (可選)

如果您希望每次只輸入 wsl 命令時,預設就進入 Ubuntu 而不是 docker-desktop,您可以設定 Ubuntu 為預設發行版:

  • 在 PowerShell 中輸入:
    wsl --set-default Ubuntu
  • 預期結果:
    • 下次您在 PowerShell 中直接輸入 wsl 時,它就會直接啟動 Ubuntu

切換到 Ubuntu 的命令是:

wsl -d Ubuntu

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *