Docker Compose Best practice:PUID 和 PGID 的安全配置 #
記錄一下學習 Docker Compose 時 PUID
和 PGID
的 best practice,構建更安全可靠的容器化環境。
為什麼要關注 PUID 和 PGID? #
- 權限控制:
PUID
(用戶ID) 和PGID
(組ID) 決定了容器在主機文件系統上創建文件的所屬用戶和組。默認情況下,容器以root
用戶身份運行 (UID 0),這可能帶來安全隱患。 - 避免權限問題: 如果多個用戶共享主機系統,大家共用 PUID 的話, 可能會導致權限衝突。
- 提升安全性: 配置適當的
PUID
和PGID
可以限制容器的權限,即使容器被入侵,也能降低攻擊者對主機系統的影響。
Best practice #
-
創建專用 Docker 用戶 (強烈推薦)
-
在主機系統上創建一個專門用於運行 Docker 容器的用戶和組:
sudo useradd -m -d /home/dockeruser -s /bin/bash dockeruser sudo groupadd dockergroup sudo usermod -aG dockergroup dockeruser
- 將
dockeruser
和dockergroup
替換為自行定義的名稱。
- 將
-
在
docker-compose.yml
文件中,將PUID
和PGID
環境變量設置為新用戶的 UID 和 GID:version: '3' services: your-service: # ... 其他配置 environment: - PUID=1001 # 新用戶的 UID - PGID=1001 # 新用戶的 GID
-
-
在容器內使用非 root 用戶
-
盡可能確保 Docker 容器以非 root 用戶運行主要進程。 這可以減輕容器被入侵時的影響。
-
在
docker-compose.yml
中,使用user
指令指定容器內的用戶:version: '3' services: your-service: # ... 其他配置 user: "1001:1001" # 以新用戶身份運行
-
查找新用戶的 PUID 和 PGID #
使用 id
命令:
```bash
id dockeruser # 替換為您創建的用戶名
```
輸出示例:
```
uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup)
```
* `uid=1001` 是 `PUID`。
* `gid=1001` 是 `PGID`.
總結 #
通過遵循以上的設置,可以創建一個更安全、更有條理的 Docker 容器運行環境。