背景
系統環境:Ubuntu 24.04 LTS
Docker 版本:Docker version 26.1.4
問題表象:
開啟 Docker Desktop 之後,無任何反應,使用命令列直接執行 Docker Desktop,提示:
running under systemd
解決方案
命令列執行如下指令
$ sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
$ systemctl --user restart docker-desktop
隨後重新開啟 Docker Desktop,即可正常執行
注意:該方式每次系統重啟後都需要重新來一遍,你也可以透過
建立檔案 /etc/sysctl.d/20-apparmor.conf or /etc/sysctl.d/60-apparmor-namespace.conf 來寫入這部分配置:
kernel.apparmor_restrict_unprivileged_userns = 0
但後續 bug 修復後最好移除掉,具體原因看後面的解釋
具體可以跳轉:解決方案來源
問題原因
透過上面的解決方案來源連結裡,有一個 Spikhalskiy
老哥提到,這是 Electron 和 Chromium 的問題:electron/electron#41066,最初的解決方案也是在這裡提供的:electron/electron#41066 (comment)
透過這個 bug 的描述可以得知,由於在 Ubuntu 24.04 LTS 下 kernel.apparmor_restrict_unprivileged_userns=1
的預設配置,導致所有 Electron
應用都無法正常開啟。
實際上更深層次的原因,是和 Ubuntu 24.04 更新的策略相關的,這個配置是 Ubuntu 的特權使用者名稱空間配置,簡單來說就是在 Ubuntu 24.04 版本的裡,現在限制非特權使用者名稱空間的使用,所以會影響系統上所有非特權且不受限制的程式,剛好基於 Chromium 的 Electron 應用都會受限,而 Dockertop 就是基於 Electron 的,所以也受了影響。
感興趣的同學,可以跳轉官方更新說明 非特權使用者名稱空間限制 檢視更多資訊。