# 4.10 进入容器

在使用 **-d** 参数时，容器启动后会进入后台，用户无法看到容器中的信息，也无法进行操作。这个时候如果需要进入容器进行操作，推荐使用官方的**attach**或**exec**命令。

## 1. attach命令

<mark style="color:blue;">**attach**</mark>是Docker自带的命令，命令格式为**docker \[container] attach \[--detach-keys=string] \[--no-stdin] \[--sig-proxy\[=true]]：**

这个命令支持三个主要选项：

* \--detach-keys=string：指定退出attach模式的快捷键序列，默认是CTRL-p,CTRL-q，**需要同时按下CTRL键、p和q这三个键；**
* \--no-stdin=true|false：是否关闭标准输入，默认是保持打开；
* \--sig-proxy=true|false：是否代理收到的系统信号给应用进程，默认为true。

{% hint style="warning" %} <mark style="color:orange;">**当多个窗口同时attach到同一个容器的时候，所有窗口都会同步显示；当某个窗口因命令阻塞时，其他窗口也无法执行操作了。**</mark>
{% endhint %}

## 2. exec命令

可以使用<mark style="color:blue;">**docker exec**</mark>命令在运行中容器内直接执行任意命令，命令格式为**docker  \[container]  exec  \[-d|--detach]  \[--detach-keys=string]  \[-i|--interactive] \[--privileged] \[-t|--tty] \[-u|--user=USER] CONTAINER COMMAND \[ARG...]** 。

比较重要的参数有：

* **-d, --detach**：在容器中后台执行命令；
* **--detach-keys=string**：指定将容器切回后台的按键；
* **-e, --env=\[]**：指定环境变量列表；
* **-i, --interactive=true|false**：打开标准输入接受用户输入命令，默认值为false；
* **--privileged=true|false**：是否给执行命令以高权限，默认值为false；
* **-t, --tty=true|false**：分配伪终端，默认值为false；
* **-u, --user=string**：执行命令的用户名或ID。

例如，进入到刚创建的容器中，并启动一个bash：

```bash
$ docker exec -it a96249ecc8dd /bin/bash
root@a96249ecc8dd:/# 
```
