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,7 +1,11 @@
## 7.15 SHELL 指令
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
如下代码块所示展示了相关示例
```docker
SHELL ["executable", "parameters"]
```
@@ -10,15 +14,17 @@ SHELL ["executable", "parameters"]
- **Linux 默认**`["/bin/sh", "-c"]`
- **Windows 默认**`["cmd", "/S", "/C"]`
该指令会影响后续的 `RUN`, `CMD`, `ENTRYPOINT` 指令当它们使用 shell 格式时
该指令会影响后续的 `RUN``CMD``ENTRYPOINT` 指令 (当它们使用 shell 格式时)
---
### 为什么要用 SHELL 指令
#### 1. 使用 bash 特性
本节涵盖了相关内容与详细描述主要探讨以下几个方面
默认的 `/bin/sh`通常是 dash alpine ash功能有限如果你需要使用 bash 的特有功能如数组`{}` 扩展`pipefail` 可以切换 shell
#### 1使用 bash 特性
默认的 `/bin/sh` (通常是 dash alpine ash) 功能有限如果你需要使用 bash 的特有功能 (如数组`{}` 扩展`pipefail` )可以切换 shell
```docker
FROM ubuntu:24.04
@@ -32,7 +38,7 @@ SHELL ["/bin/bash", "-c"]
RUN echo {a..z}
```
#### 2. 增强错误处理pipefail
#### 2增强错误处理
默认情况下管道命令 `cmd1 | cmd2` 只要 `cmd2` 成功整个指令就视为成功这可能掩盖构建错误
@@ -54,7 +60,7 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN wget -O - https://invalid-url | tar xz
```
#### 3. Windows 环境
#### 3Windows 环境
Windows 容器中经常需要在 `cmd` `powershell` 之间切换
@@ -103,7 +109,7 @@ RUN echo "Using sh again"
### 对其他指令的影响
`SHELL` 影响的是所有使用 **shell 格式** 的指令
`SHELL` 影响的是所有使用 **shell 格式**的指令
| 指令格式 | 是否受 SHELL 影响 |
|---------|-------------------|
@@ -118,7 +124,9 @@ RUN echo "Using sh again"
### 最佳实践
#### 1. 推荐开启 pipefail
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1推荐开启 pipefail
对于使用 bash 的镜像强烈建议开启 `pipefail`以确保构建过程中的错误能被及时捕获
@@ -126,11 +134,11 @@ RUN echo "Using sh again"
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
```
#### 2. 明确意图
#### 2明确意图
如果由于脚本需求必须更改 shell最好在 Dockerfile 中显式声明而不是依赖默认行为
#### 3. 尽量保持一致
#### 3尽量保持一致
避免在 Dockerfile 中频繁切换 SHELL这会使构建过程难以理解和调试尽量在头部定义一次即可