Add blank lines before headers

This commit is contained in:
yeasy
2026-03-21 12:57:51 -07:00
parent 0648f63979
commit 312f8fea42
76 changed files with 411 additions and 0 deletions

View File

@@ -42,6 +42,7 @@ CMD nginx -g "daemon off;"
**实际执行**会被包装为 `sh -c`
```docker
## 你写的
CMD echo $HOME
@@ -67,9 +68,11 @@ CMD ["sh", "-c", "echo $HOME"]
#### 信号传递问题示例
```docker
## ❌ shell 格式docker stop 会超时
CMD node server.js
## 实际是 sh -c "node server.js"
## SIGTERM 发给 sh不会传递给 node
@@ -77,6 +80,7 @@ CMD node server.js
## ✅ exec 格式docker stop 正常工作
CMD ["node", "server.js"]
## SIGTERM 直接发给 node
...
@@ -89,6 +93,7 @@ CMD ["node", "server.js"]
`docker run` 后的命令会覆盖 Dockerfile 中的 CMD
```bash
## ubuntu 默认 CMD 是 /bin/bash
$ docker run -it ubuntu # 进入 bash
@@ -111,6 +116,7 @@ CMD ["/bin/bash"] + cat /etc/os-release
#### 错误示例
```docker
## ❌ 容器启动后立即退出
CMD service nginx start
@@ -135,6 +141,7 @@ CMD service nginx start
#### 正确做法
```docker
## ✅ 让 nginx 在前台运行
CMD ["nginx", "-g", "daemon off;"]
@@ -152,6 +159,7 @@ CMD ["nginx", "-g", "daemon off;"]
#### 单独使用 CMD
```docker
## Dockerfile
CMD ["curl", "-s", "http://example.com"]
@@ -165,6 +173,7 @@ $ docker run myimage curl -v ... # 完全覆盖
#### 搭配 ENTRYPOINT
```docker
## Dockerfile
ENTRYPOINT ["curl", "-s"]
@@ -185,6 +194,7 @@ $ docker run myimage http://other.com # curl -s http://other.com参数覆盖
#### 1. 优先使用 exec 格式
```docker
## ✅ 推荐
CMD ["python", "app.py"]
@@ -197,6 +207,7 @@ CMD ["sh", "-c", "echo $PATH && python app.py"]
#### 2. 确保应用在前台运行
```docker
## ✅ 前台运行
CMD ["nginx", "-g", "daemon off;"]
@@ -212,6 +223,7 @@ CMD systemctl start nginx
#### 3. 使用双引号
```docker
## ✅ 正确:双引号
CMD ["node", "server.js"]
@@ -224,6 +236,7 @@ CMD ['node', 'server.js']
#### 4. 配合 ENTRYPOINT 使用
```docker
## 用于可配置参数的场景
ENTRYPOINT ["python", "app.py"]
@@ -252,6 +265,7 @@ CMD ["echo", "second"] # 只有这个生效
#### Q如何在 CMD 中使用环境变量
```docker
## 方法1使用 shell 格式
CMD echo "Port is $PORT"
@@ -266,6 +280,7 @@ CMD ["sh", "-c", "echo Port is $PORT"]
可能是使用了 shell 格式信号被 sh 吃掉了
```docker
## ❌ 信号无法传递
CMD python app.py