Fix and improve

This commit is contained in:
Baohua Yang
2026-02-12 16:51:50 -08:00
parent bae82e993a
commit 0835f8467a
100 changed files with 280 additions and 622 deletions

View File

@@ -20,8 +20,6 @@ CMD 有三种格式:
#### exec 格式推荐
具体内容如下
```docker
CMD ["nginx", "-g", "daemon off;"]
CMD ["python", "app.py"]
@@ -35,8 +33,6 @@ CMD ["node", "server.js"]
#### shell 格式
具体内容如下
```docker
CMD echo "Hello World"
CMD nginx -g "daemon off;"
@@ -70,8 +66,6 @@ CMD ["sh", "-c", "echo $HOME"]
#### 信号传递问题示例
具体内容如下
```docker
## ❌ shell 格式docker stop 会超时
@@ -85,8 +79,7 @@ CMD node server.js
CMD ["node", "server.js"]
## SIGTERM 直接发给 node
具体内容如下:
...
```
---
@@ -117,8 +110,6 @@ CMD ["/bin/bash"] + cat /etc/os-release
#### 错误示例
具体内容如下
```docker
## ❌ 容器启动后立即退出
@@ -127,8 +118,6 @@ CMD service nginx start
#### 原因分析
具体内容如下
```
1. CMD service nginx start
↓ 被转换为
@@ -145,8 +134,6 @@ CMD service nginx start
#### 正确做法
具体内容如下
```docker
## ✅ 让 nginx 在前台运行
@@ -164,8 +151,6 @@ CMD ["nginx", "-g", "daemon off;"]
#### 单独使用 CMD
具体内容如下
```docker
## Dockerfile
@@ -179,8 +164,6 @@ $ docker run myimage curl -v ... # 完全覆盖
#### 搭配 ENTRYPOINT
具体内容如下
```docker
## Dockerfile
@@ -193,7 +176,7 @@ $ docker run myimage # curl -s http://example.com
$ docker run myimage http://other.com # curl -s http://other.com参数覆盖
```
详见 [ENTRYPOINT 入口点](entrypoint.md) 章节
详见 [ENTRYPOINT 入口点](7.5_entrypoint.md) 章节
---
@@ -201,8 +184,6 @@ $ docker run myimage http://other.com # curl -s http://other.com参数覆盖
#### 1. 优先使用 exec 格式
具体内容如下
```docker
## ✅ 推荐
@@ -215,8 +196,6 @@ CMD ["sh", "-c", "echo $PATH && python app.py"]
#### 2. 确保应用在前台运行
具体内容如下
```docker
## ✅ 前台运行
@@ -232,8 +211,6 @@ CMD systemctl start nginx
#### 3. 使用双引号
具体内容如下
```docker
## ✅ 正确:双引号
@@ -246,8 +223,6 @@ CMD ['node', 'server.js']
#### 4. 配合 ENTRYPOINT 使用
具体内容如下
```docker
## 用于可配置参数的场景
@@ -257,6 +232,8 @@ CMD ["--port", "8080"]
## 运行时可以覆盖端口
$ docker run myapp --port 9000
...
```
---
@@ -274,8 +251,6 @@ CMD ["echo", "second"] # 只有这个生效
#### Q: 如何在 CMD 中使用环境变量
具体内容如下
```docker
## 方法1使用 shell 格式
@@ -314,6 +289,6 @@ CMD ["python", "app.py"]
### 延伸阅读
- [ENTRYPOINT 入口点](entrypoint.md)固定的启动命令
- [后台运行](../../05_container/5.2_daemon.md)容器前台/后台概念
- [最佳实践](../../16_appendix/16.1_best_practices.md)Dockerfile 编写指南
- [ENTRYPOINT 入口点](7.5_entrypoint.md)固定的启动命令
- [后台运行](../05_container/5.2_daemon.md)容器前台/后台概念
- [最佳实践](../16_appendix/16.1_best_practices.md)Dockerfile 编写指南