exec命令用于从外部运行容器内部的命令

Docker技术问答:http://linux.xyz/topic/Docker

$ docker exec <选项><容器名称,id><命令><参数>

-d、--detach=false 以后台模式运行命令

-i、--interactive=false 开启标准输入,即使未与容器连接,也维持标准输入

-t、--tty=false 使用TTY模式(pseudo-TTY)若要使用bash,则必须设置该选项。若不设置该选项,则虽然输入命令,但不显示shell

运行如下命令,创建容器

$ docker run -d --name hello ubuntu /bin/bash -c "while true; do echo Hello World; sleep 1; done"

设置每隔一秒输出一次hello world。在此状态下,运行容器内部的/bin/bash,连接至bash shell ,如下所示。连接bash shell 时,只有使用 -i -t 选项才能输入命令并查看结果

$ docker exec -it hello /bin/bash  #连接容器
$ ps ax  # 查看进程

若在容器内部运行ps ax 命令,则可以看到由docker exec 命令运行的其他/bin/bash,与输出hello world 的/bin/bash 不是同一个。输入exit命令退出Bash shell后,容器不会停止,而会继续运行。像这样,灵活使用 docker exec 命令将Bash shell 连接到正在运行守护进程的容器上,并行多种操作 如下:不连接Bash shell,而使用apt-get等命令,在容器内安装redis-server包,

$ docker exec hello apt-get update
$ docker exec hello apt-get install -y redis-server
$ docker exec -d hello redis-server # 后台运行rides-server