USER 指定当前用户
基本语法
USER <用户名>[:<用户组>]
USER <UID>[:<GID>]为什么要使用 USER
root 用户运行的风险:
┌────────────────────────────────────────────────────────┐
│ 容器内 root ←─ 可能逃逸 ─→ 宿主机 root │
│ │ │ │
│ └── 漏洞利用 ───────────────→ 完全控制宿主机 │
└────────────────────────────────────────────────────────┘
非 root 用户运行:
┌────────────────────────────────────────────────────────┐
│ 容器内普通用户 ──逃逸后──→ 宿主机普通用户 │
│ │ │ │
│ └── 权限受限,危害降低 ─────→ 无法控制系统 │
└────────────────────────────────────────────────────────┘基本用法
创建并切换用户
使用 UID/GID
用户必须已存在
创建用户的方式
选项
说明
运行时切换用户
使用 gosu(推荐)
为什么不用 su/sudo
问题
su/sudo
gosu
运行时覆盖用户
文件权限处理
最佳实践
1. 始终使用非 root 用户
2. 使用固定 UID/GID
3. 多阶段构建中的 USER
常见问题
Q: 权限被拒绝
Q: 无法绑定低于 1024 的端口
本章小结
要点
说明
延伸阅读
最后更新于