mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-25 11:15:39 +00:00
Remove blank lines after code block markers
This commit is contained in:
@@ -27,7 +27,6 @@ Docker 提供两种进入容器的命令:
|
||||
#### docker exec 基本用法
|
||||
|
||||
```bash
|
||||
|
||||
## 进入容器并启动交互式 shell
|
||||
|
||||
$ docker exec -it 容器名 /bin/bash
|
||||
@@ -36,7 +35,6 @@ $ docker exec -it 容器名 /bin/bash
|
||||
|
||||
$ docker exec -it 容器名 /bin/sh
|
||||
```
|
||||
|
||||
#### 参数说明
|
||||
|
||||
| 参数 | 作用 |
|
||||
@@ -51,7 +49,6 @@ $ docker exec -it 容器名 /bin/sh
|
||||
#### docker exec 示例
|
||||
|
||||
```bash
|
||||
|
||||
## 启动一个后台容器
|
||||
|
||||
$ docker run -dit --name myubuntu ubuntu
|
||||
@@ -70,13 +67,11 @@ $ docker ps
|
||||
CONTAINER ID IMAGE STATUS NAMES
|
||||
69d137adef7a ubuntu Up 2 minutes myubuntu
|
||||
```
|
||||
|
||||
#### 执行单条命令
|
||||
|
||||
不进入交互模式,直接执行命令:
|
||||
|
||||
```bash
|
||||
|
||||
## 查看容器内进程
|
||||
|
||||
$ docker exec myubuntu ps aux
|
||||
@@ -89,11 +84,9 @@ $ docker exec myubuntu cat /etc/nginx/nginx.conf
|
||||
|
||||
$ docker exec -u root myubuntu apt update
|
||||
```
|
||||
|
||||
#### 只用 -i 不用 -t 的区别
|
||||
|
||||
```bash
|
||||
|
||||
## 只用 -i:可以执行命令,但没有提示符
|
||||
|
||||
$ docker exec -i myubuntu bash
|
||||
@@ -108,7 +101,6 @@ dev
|
||||
$ docker exec -it myubuntu bash
|
||||
root@69d137adef7a:/# # 有提示符
|
||||
```
|
||||
|
||||
> 💡 通常使用 `-it` 组合。只有在脚本中需要通过管道传入命令时才只用 `-i`。
|
||||
|
||||
---
|
||||
@@ -120,7 +112,6 @@ root@69d137adef7a:/# # 有提示符
|
||||
```bash
|
||||
$ docker attach 容器名
|
||||
```
|
||||
|
||||
#### 工作原理
|
||||
|
||||
`attach` 会附加到容器的 **主进程** (PID 1) 的标准输入输出:
|
||||
@@ -135,11 +126,9 @@ flowchart LR
|
||||
end
|
||||
Attach["docker attach"] -->|"附加到这里"| P1
|
||||
```
|
||||
|
||||
#### docker attach 示例
|
||||
|
||||
```bash
|
||||
|
||||
## 启动容器
|
||||
|
||||
$ docker run -dit --name myubuntu ubuntu
|
||||
@@ -150,7 +139,6 @@ $ docker run -dit --name myubuntu ubuntu
|
||||
$ docker attach myubuntu
|
||||
root@243c32535da7:/#
|
||||
```
|
||||
|
||||
#### ⚠️ 重要警告
|
||||
|
||||
**从 attach 会话中输入 `exit` 或按 `Ctrl+D` 会导致容器停止!**
|
||||
@@ -163,7 +151,6 @@ $ docker ps
|
||||
CONTAINER ID IMAGE STATUS NAMES
|
||||
243c32535da7 ubuntu Exited (0) 2 seconds ago myubuntu
|
||||
```
|
||||
|
||||
**原因**:attach 附加到主进程,退出主进程就等于退出容器。
|
||||
|
||||
#### 安全退出 attach
|
||||
@@ -182,7 +169,6 @@ $ docker ps # 容器仍在运行
|
||||
CONTAINER ID IMAGE STATUS NAMES
|
||||
243c32535da7 ubuntu Up 5 minutes myubuntu
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5.4.5 exec vs attach 对比
|
||||
@@ -219,7 +205,6 @@ flowchart LR
|
||||
Container1 -.-> note1
|
||||
Container2 -.-> note2
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5.4.6 最佳实践
|
||||
@@ -227,7 +212,6 @@ flowchart LR
|
||||
#### 1. 首选 docker exec
|
||||
|
||||
```bash
|
||||
|
||||
## 进入容器调试
|
||||
|
||||
$ docker exec -it myapp bash
|
||||
@@ -240,7 +224,6 @@ $ docker exec myapp tail -f /var/log/app.log
|
||||
|
||||
$ docker exec myapp python manage.py migrate
|
||||
```
|
||||
|
||||
#### 2. 生产环境避免进入容器
|
||||
|
||||
笔者建议:生产环境应尽量避免进入容器直接操作,而是通过:
|
||||
@@ -254,7 +237,6 @@ $ docker exec myapp python manage.py migrate
|
||||
某些精简镜像 (如基于 `scratch` 或 `distroless`) 没有 shell:
|
||||
|
||||
```bash
|
||||
|
||||
## 这会失败
|
||||
|
||||
$ docker exec -it myapp bash
|
||||
@@ -264,7 +246,6 @@ OCI runtime exec failed: exec failed: unable to start container process: exec: "
|
||||
|
||||
$ docker debug myapp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5.4.7 常见问题
|
||||
@@ -280,11 +261,9 @@ $ docker debug myapp
|
||||
```bash
|
||||
$ docker exec -it myapp /bin/sh
|
||||
```
|
||||
|
||||
#### Q:需要 root 权限
|
||||
|
||||
```bash
|
||||
$ docker exec -u root -it myapp bash
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user