4.3 进入容器
在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。
这个时候如果需要进入容器进行操作,推荐使用官方的attach或exec命令。
1. attach命令
attach是Docker自带的命令,命令格式为:
docker [container] attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
这个命令支持三个主要选项:
❑ --detach-keys[=[]]:指定退出attach模式的快捷键序列,默认是CTRL-p CTRL-q;
❑ --no-stdin=true|false:是否关闭标准输入,默认是保持打开;
❑ --sig-proxy=true|false:是否代理收到的系统信号给应用进程,默认为true。
下面示例如何使用该命令:
$ docker run -itd ubuntu 243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic_hypatia $ docker attach nostalgic_hypatia root@243c32535da7:/#
然而使用attach命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
2. exec命令
从Docker的1.3.0版本起,Docker提供了一个更加方便的工具exec命令,可以在运行中容器内直接执行任意命令。
该命令的基本格式为:
docker [container] exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]
比较重要的参数有:
❑ -d, --detach:在容器中后台执行命令;
❑ --detach-keys="":指定将容器切回后台的按键;
❑ -e, --env=[]:指定环境变量列表;
❑ -i, --interactive=true|false:打开标准输入接受用户输入命令,默认值为false;
❑ --privileged=true|false:是否给执行命令以高权限,默认值为false;
❑ -t, --tty=true|false:分配伪终端,默认值为false;
❑ -u, --user="":执行命令的用户名或ID。
例如,进入到刚创建的容器中,并启动一个bash:
$ docker exec -it 243c32535da7 /bin/bash root@243c32535da7:/#
可以看到会打开一个新的bash终端,在不影响容器内其他应用的前提下,用户可以与容器进行交互。
注意
通过指定-it参数来保持标准输入打开,并且分配一个伪终端。通过exec命令对容器执行操作是最为推荐的方式。
进一步地,可以在容器中查看容器中的用户和进程信息:
root@243c32535da7:/# w 11:07:36 up 3:14, 0 users, load average: 0.00, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root@243c32535da7:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:56 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done root 699 0 0 11:07 ? 00:00:00 /bin/bash root 716 1 0 11:07 ? 00:00:00 sleep 1 root 717 699 0 11:07 ? 00:00:00 ps -ef