2025/12/20

Permanently Set Docker Socket Permissions to 666

從之前的 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

沒有留言: