在 docker 的容器中該如何使用 sudo 指令? 該如何切換到 root ?

在 linux 中如果要執行比較危險的動作就會需要 root 權限,而基本上有兩個方式可以達成,一個是切換為 root 或是具有 root 權限的帳號,另一個就是使用 sudo ,以 root 權限暫時執行指令。

容器內居然沒有 sudo 指令?

在 docker 容器內執行 sudo 指令時,有很大的機率出現下面的錯誤:
  
sudo
bash: sudo: command not found


想要直接切換到 root 帳號,但是也不知道密碼,輸入了好幾次都錯誤
  
su -
Password:
su: Authentication failure


為什麼沒有 sudo 指令?

而我們在建置 docker 容器的時候,會需要有一個最底層最基礎的作業系統,通常就是使用 linux ,然後在上面再安裝其他的軟體或執行環境。也因為只是需要一個最基礎的作業系統,為了減少空間,所以很多不是必需的指令就不會被安裝,例如 sudo 就沒有被安裝。

那該怎麼使用 root 權限?

感覺起來這個問題無法解決,因為沒有 sudo 指令,也不知道 root 密碼(應該說 root 還沒被設定密碼),但其實有個很簡單的解決方式,就是使用 root 帳號進入容器即可! 平時在進入 docker 容器並要執行指令時我們是這樣進去的:
    
docker exec -it ubuntu bash
    
註: ubuntu 為容器名稱

使用 root 帳號進入容器:
    
docker exec -it -u root ubuntu bash
    

之後就可以在裡面做只有 root 才能做的事情了!

不過其實這裡的 root 並沒有所有的權限,雖然一般會在容器內做的事情並不會讓你發現沒有全部的權限,不過如果需要真需要的時候可以加上 --privileged 參數即可。

參考資料: docker exec

留言