從之前的 Vagrant 改到使用 wsl + docker 後,PhpStorm 的開發會連到 wsl 裡面的 Docker image 測試,速度還可以接受,Docker 預設情況下,/var/run/docker.sock 的權限為 660(srw-rw----),只有 root 用戶和 docker 組成員才能訪問。如果需要讓所有用戶都能訪問 Docker socket,需要將權限改為 666,通過 systemd 的 override 機制來永久設置 Docker socket 的權限。
步驟 1:創建 systemd 覆蓋配置
sudo mkdir -p /etc/systemd/system/docker.socket.d
步驟 2:創建配置文件
sudo tee /etc/systemd/system/docker.socket.d/override.conf > /dev/null << 'EOF'
[Socket]
SocketMode=0666
EOF
或者手動創建文件 /etc/systemd/system/docker.socket.d/override.conf,內容如下:
[Socket]
SocketMode=0666
步驟 3:應用配置
sudo systemctl daemon-reload
sudo systemctl restart docker.socket docker.service
步驟 4:驗證權限
ls -la /var/run/docker.sock
應該看到輸出類似:
srw-rw-rw- 1 root docker 0 Dec 20 00:15 /var/run/docker.sock
原理說明
- Docker 的 socket 是由 systemd 的
docker.socket單元管理的 - 通過在
/etc/systemd/system/docker.socket.d/目錄下創建 override 配置文件,可以覆蓋默認的 socket 設置 SocketMode=0666指定 socket 文件的權限為 666(所有用戶可讀寫)- 每次 Docker 啟動時,systemd 會自動應用這個權限設置
安全注意事項
⚠️ 警告:將 Docker socket 權限設置為 666 意味著系統上的任何用戶都可以訪問 Docker,這等同於給予所有用戶 root 權限。請確保你了解這樣做的安全風險:
- 任何用戶都可以運行容器
- 可以掛載宿主機的任何目錄
- 可以以 root 權限執行命令
建議僅在開發環境或你完全信任所有用戶的環境中使用此配置。
配置文件位置
- 配置文件:
/etc/systemd/system/docker.socket.d/override.conf - Socket 文件:
/var/run/docker.sock
恢復默認權限
如果需要恢復默認的 660 權限,刪除 override 配置文件並重啟服務:
sudo rm /etc/systemd/system/docker.socket.d/override.conf
sudo systemctl daemon-reload
sudo systemctl restart docker.socket docker.service
沒有留言:
張貼留言