當我們在一臺 Linux 系統中安裝了 Docker 後, 有時候會遇到下麵這樣的錯誤, 我們在運行 docker 的命令時必須加上 sudo, 例如: , 但是我們其實更希望能夠直接通過 來運行 docker 命令。 那麼我們可以如何解決這樣的問題呢? 可以參考如下步驟: 創建 docker 的用 ...
當我們在一臺 Linux 系統中安裝了 Docker 後, 有時候會遇到下麵這樣的錯誤, 我們在運行 docker 的命令時必須加上 sudo, 例如: sudo docker ps
, 但是我們其實更希望能夠直接通過 docker ps
來運行 docker 命令。
那麼我們可以如何解決這樣的問題呢?
可以參考如下步驟:
-
創建 docker 的用戶組:
sudo groupadd docker
-
將當前 user 加入 docker 的用戶組:
sudo usermod -aG docker $USER
-
重啟 docker:
sudo snap restart docker /
sudo service docker restart /
sudo /etc/init.d/docker restart
- 從當前 shell 中登出用戶並再次登陸,以重新評估當前的用戶組的許可權。
切換當前會話到新 group 或者重啟會話。可以通過
newgrp - docker
切換當前用戶組到 docker 用戶組。
註意:這一步是必須的,否則 groups 命令獲取到的是緩存的用戶組信息,剛添加的用戶組信息可能還未能生效,所以
docker ps
執行時同樣會有錯。
一般情況下,操作到這一步就可以解決該問題了,但有時還會遇到下麵的問題,導致仍然無法直接通過 docker ps
訪問 docker 命令。
如果在確定了用戶組的設置是正確的情況下,再次遇到這個問題,就是由於 /var/run/docker.sock
文件的許可權不夠導致的。可以按如下操作解決:
-
ls -lrth /var/run/docker.sock
查看 docker.sock 的許可權。會發現 docker 用戶組其實是沒有讀寫許可權的。
-
sudo chmod 666 /var/run/docker.sock
更改許可權。
-
ls -lrth /var/run/docker.sock
再次查看 docker.sock 的許可權。這樣就可以了。
這樣就可以直接通過 docker ps
這樣的方式操作 docker 命令,而不用每次都加上 sudo
了。
參考文檔:
- https://docs.docker.com/install/linux/linux-postinstall/
- https://techoverflow.net/2018/12/15/how-to-fix-docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket/
本文首發於「愚一筆記」。