在Ubuntu上安裝Docker非常容易! 任何人,甚至新手也可以在15分鐘内安裝好它。安裝好Docker後,我注意到大多數的Docker操作不能通過普通使用者進行。我必須要以root使用者或者sudo來運作。每當我嘗試以非root或者不适用sudo運作Docker時,我會得到下面的錯誤:
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.40/version: dial unix /var/run/docker.sock: connect: permission denied
例如,當我想要使用下面的指令檢視Docker版本:
$ docker version
然後,我會得到下面的錯誤資訊:
Client: Docker Engine - CommunityVersion: 19.03.8API version: 1.40Go version: go1.12.17Git commit: afacb8b7f0Built: Wed Mar 11 01:25:46 2020OS/Arch: linux/amd64Experimental: falseGot permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied
但是當我使用sudo權限運作指令時:
$ sudo docker version
它會顯示目前安裝的Docker版本以及更多的資訊:
Client: Docker Engine - Community Version: 19.03.8 API version: 1.40 Go version: go1.12.17 Git commit: afacb8b7f0 Built: Wed Mar 11 01:25:46 2020 OS/Arch: linux/amd64 Experimental: falseServer: Docker Engine - Community Engine: Version: 19.03.8 API version: 1.40 (minimum version 1.12) Go version: go1.12.17 Git commit: afacb8b7f0 Built: Wed Mar 11 01:24:19 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
在檢視Docker文檔後,我意識到Docker的daemon預設是連接配接到了一個Unix socket而不是TCP端口。由于Unix socket屬于root使用者,Docker daemon将隻能通過root使用者運作。是以普通使用者不能執行大多數Docker指令。
如果你想以非root使用者在Linux上運作Docker,你需要通過下面的步驟進行實作。我在Ubuntu 18.04伺服器上進行了測試,他可以很好地工作! 同樣他也應該能在其它Linux發行版上良好運作。
在Linux上以非root使用者運作Docker
要解決Docker權限不足的問題并以非root使用者使用Docker,使用下面的指令建立一個"docker"使用者組:
$ sudo groupadd docker
下一步,将你的使用者添加到docker組中:
$ sudo usermod -aG docker $USER
在将使用者添加到docker組後,登出會話然後重新登入以使得設定生效。
或者,也可以通過下面的指令來将改變應用到組:
$ newgrp docker
從現在開始,普通使用者也可以不适用sudo權限運作Docker了。
我們以普通使用者運作下面的指令:
$ docker version$ docker run hello-world
輸出示例:
看到了嗎?我可以這些指令我都可以在不适用sudo的情況下運作。
有時,當你在将使用者添加到Docker組前已經通過sudo權限運作了一些Docker指令,你可能會看到下面的錯誤。
WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied
上面的錯誤表明你的~/.docker/目錄因為sudo指令而具有不正确的權限。要解決這個問題,你需要通過下面的指令來改變目錄所有權:
$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R
登出再登入來使其生效。
如果這仍不能解決問題,你也許需要删掉~/.docker/目錄。它會在後面被自動生成,不過這樣你會失去一所有的自定義設定。
希望這對你有幫助。
往期文章
Linux下制作系統的U盤啟動盤
Linux下如何拼接PDF檔案
Linux下挂載使用Windows的NTFS檔案系統
Quantum ESPRESSO教程之電子局域函數計算(Pymatflow篇)
本文譯自: How To Run Docker As Non-root User In Linux
譯者: 生材有道
校對: OpenView
原文連結: https://www.ostechnix.com/how-to-run-docker-as-non-root-user-in-linux/
原文及本文遵循: [CC BY-NC協定]