style: apply global formatting fixes (struct, spacing, zhlint)

This commit is contained in:
Baohua Yang
2026-02-21 11:08:52 -08:00
parent ad68b2d973
commit 79ac9c639a
159 changed files with 1708 additions and 882 deletions

View File

@@ -1,13 +1,17 @@
## 7.11 USER 指定当前用户
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
如下代码块所示展示了相关示例
```docker
USER <用户名>[:<用户组>]
USER <UID>[:<GID>]
```
`USER` 指令切换后续指令RUNCMDENTRYPOINT的执行用户
`USER` 指令切换后续指令 (RUNCMDENTRYPOINT) 的执行用户
---
@@ -34,8 +38,12 @@ flowchart LR
### 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 创建并切换用户
如下代码块所示展示了相关示例
```docker
FROM node:20-alpine
@@ -60,6 +68,8 @@ CMD ["node", "server.js"]
#### 使用 UID/GID
如下代码块所示展示了相关示例
```docker
## 也可以使用数字
@@ -84,6 +94,10 @@ RUN useradd -r -s /bin/false appuser
USER appuser
```
#### 概述
总体概述了以下内容
#### 创建用户的方式
**Debian/Ubuntu**
@@ -112,7 +126,9 @@ RUN addgroup -g 1001 -S appgroup && \
### 运行时切换用户
#### 使用 gosu推荐
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 使用 gosu (推荐)
ENTRYPOINT 脚本中切换用户时不要使用 `su` `sudo`应使用 [gosu](https://github.com/tianon/gosu)
@@ -205,7 +221,11 @@ CMD ["node", "server.js"]
### 最佳实践
#### 1. 始终使用非 root 用户
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1始终使用非 root 用户
如下代码块所示展示了相关示例
```docker
## ✅ 推荐
@@ -219,7 +239,7 @@ CMD ["myapp"]
CMD ["myapp"] # 以 root 运行
```
#### 2. 使用固定 UID/GID
#### 2使用固定 UID/GID
便于在宿主机和容器间共享文件
@@ -231,7 +251,9 @@ RUN addgroup -g 1000 -S appgroup && \
USER 1000:1000
```
#### 3. 多阶段构建中的 USER
#### 3多阶段构建中的 USER
如下代码块所示展示了相关示例
```docker
## 构建阶段可以用 root
@@ -255,7 +277,9 @@ CMD ["node", "server.js"]
### 常见问题
#### Q: 权限被拒绝
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### Q权限被拒绝
运行以下命令
@@ -269,12 +293,12 @@ permission denied: '/app/data.log'
RUN mkdir -p /app/data && chown appuser:appuser /app/data
```
#### Q: 无法绑定低于 1024 的端口
#### Q无法绑定低于 1024 的端口
root 用户无法绑定 80443 等端口
**解决**
1. 使用高端口 8080
1. 使用高端口 ( 8080)
2. 在运行时映射端口`docker run -p 80:8080`
---