Docker exec进入容器和docker attach进入容器有什么区别
时间: 2024-06-05 11:05:45 浏览: 239
Docker `exec` 和 `attach` 进入容器是两个不同的操作,它们有各自的用途和行为:
1. **Docker exec**:
- **进入一个新的子进程**:当你使用 `docker exec` 命令时,你实际上创建了一个新的子进程,在指定的容器中运行指定的命令。这不会直接打开容器的终端会话,而是启动一个新的 shell 或命令行,你可以执行一些操作后立即退出,容器本身不会被阻塞。
- **无交互模式**:默认情况下,`docker exec` 是非交互式的,这意味着你不能直接在容器内部进行交互式操作,除非你指定 `-it` 参数来开启一个交互式 TTY。
- **权限管理**:`exec` 创建的进程继承了调用它的 Docker 守护进程的权限,因此可能有限制。
2. **Docker attach**:
- **进入容器会话**:`docker attach` 则会直接连接到一个正在运行的容器的终端或控制台,允许你在容器内部进行交互式的操作,如同在物理机上一样,可以输入输出、查看日志等。
- **实时交互**:`attach` 支持交互式操作,你可以在容器内进行编辑、查看文件等。
- **挂起**:如果你离开 attach 的会话,容器会继续运行,直到你再次连接或通过其他方式停止它。
总结一下:
- `exec` 更适合执行单次命令或操作,适合非交互式任务。
- `attach` 用于交互式操作,适合进行持续监控和维护。
相关问题
docker exec 和docker attach
`docker exec` 和 `docker attach` 都是 Docker 管理容器时常用的命令,但它们的功能有所不同。
`docker exec` 命令允许你在运行的容器内执行命令或启动新进程。它不会打开一个新的TTY连接到容器,而是将命令的结果直接输出到终端。例如,如果你想查看容器内部某个进程的日志或者运行一个新的命令:
```shell
docker exec -it container_name command_to_run
```
这里 `-i` 表示保持输入(interactive),`-t` 表示分配一个伪tty(tty allocation)。如果想看日志,可以省略 `-i` 参数:
```shell
docker exec container_name tail -f /var/log/app.log
```
而 `docker attach` 则会建立一个TTY连接,让你直接与容器内的 shell 进行交互,就像在本地终端下操作一样。这意味着你可以实时看到容器内的输出,并进行命令输入:
```shell
docker attach container_name
```
如果你想要离开当前的连接,只需按 `Ctrl+P`, `Ctrl+Q` 就可以退出。
20.docker进入容器的方法有哪些?() A.使用docker attch命令 B.使用exit命令 C.使用docker attach命令 D.使用docker exec命令
进入Docker容器的方法有两种常用方式:
C. 使用docker attach命令:这个命令可以将当前终端附加到正在运行的容器上,使得可以直接在容器内部执行命令。例如,使用以下命令进入一个正在运行的容器:
```bash
docker attach <container_id>
```
D. 使用docker exec命令:这个命令可以在容器内部执行指定的命令,而不需要附加到容器中。例如,使用以下命令进入一个正在运行的容器:
```bash
docker exec -it <container_id> /bin/bash
```
所以正确的选项是C(使用docker attach命令)和D(使用docker exec命令)。选项A(使用docker attch命令)是错误的拼写,应该是docker attach。选项B(使用exit命令)是退出容器而不是进入容器的命令。
阅读全文