Docker 17
引擎: CLI | Engine: CLI

docker exec

docker exec

描述

在正在运行的容器中运行命令

使用

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

备选方案

名字,简写默认描述
--detach, -d false分离模式:在后台运行命令
--detach-keys 覆盖分离容器的键序列
--env,-e设置环境变量
--interactive, -i false即使没有连接,也要保持STDIN打开
--privileged false给命令赋予扩展权限
--tty, -t false分配一个伪TTY
--user,-u用户名或UID(格式:<名称| uid>:<组| gid>)

父命令

命令描述
docker Docker CLI的基本命令。

扩展描述

docker exec命令在正在运行的容器中运行新命令。

该命令docker exec仅在容器的主进程(PID 1)正在运行时使用运行开始,并且如果容器重新启动,则不会重新启动该命令。

COMMAND 将在容器的默认目录中运行。它的底层映像有一个在其 Dockerfile 中使用 WORKDIR 指令指定的自定义目录,这将用于替代。

COMMAND 应该是可执行文件,链接或引用的命令将不起作用。例如:docker exec -ti my_container "echo a && echo b"不会工作,但docker exec -ti my_container sh -c "echo a && echo b"会。

实例

在正在运行的容器上运行docker exec

首先,启动一个容器。

$ docker run --name ubuntu_bash --rm -i -t ubuntu bash

这将创建一个名为容器ubuntu_bash并启动 Bash 会话。

接下来,在容器上执行一个命令。

$ docker exec -d ubuntu_bash touch /tmp/execWorks

这将在后台创建一个/tmp/execWorks运行容器内的新文件ubuntu_bash

接下来,bash在容器上执行一个交互式 shell 。

$ docker exec -it ubuntu_bash bash

这将在容器中创建一个新的 Bash 会话ubuntu_bash

接下来,在当前的 bash 会话中设置一个环境变量。

$ docker exec -it -e VAR=1 ubuntu_bash bash

这将在ubuntu_bash环境变量$VAR设置为“1” 的容器中创建一个新的 Bash 会话。请注意,此环境变量仅在当前的 Bash 会话中有效。

尝试在已暂停的容器上运行docker exec

如果容器暂停,那么docker exec命令将失败并出现错误:

$ docker pause test test $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ae3b36715d2 ubuntu:latest "bash" 17 seconds ago Up 16 seconds (Paused) test $ docker exec test ls FATA[0000] Error response from daemon: Container test is paused, unpause the container before exec $ echo $? 1