docker 容器执行

描述在正在运行的容器中执行命令
用法docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
别名
docker exec

Docker Debug 简介

要轻松地将调试 shell 放入任何容器中,请使用docker debug.Docker Debug 是docker exec.有了它,您可以获得 将 shell 放入任何容器或镜像中,甚至是纤薄的容器或镜像,无需修改。 此外,您可以在其可自定义的 工具箱。

立即探索 Docker Debug

描述

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

您用docker exec仅在容器的 主进程 (PID 1) 正在运行,如果容器 将重新启动。

该命令在容器的默认工作目录中运行。

该命令必须是可执行文件。chained 或 quoted 命令不起作用。

  • 这有效:docker exec -it my_container sh -c "echo a && echo b"
  • 这不起作用:docker exec -it my_container "echo a && echo b"

选项

选择违约描述
-d, --detach分离模式:在后台运行命令
--detach-keys覆盖用于分离容器的键序列
-e, --envAPI 1.25+设置环境变量
--env-fileAPI 1.25+读入环境变量文件
-i, --interactive即使未连接,也请保持 STDIN 打开
--privileged为命令提供扩展权限
-t, --tty分配伪 TTY
-u, --user用户名或 UID(格式:<name|uid>[:<group|gid>])
-w, --workdirAPI 1.35+容器内的工作目录

例子

docker exec在正在运行的容器上

首先,启动一个容器。

$ docker run --name mycontainer -d -i -t alpine /bin/sh

这将创建并启动一个名为mycontaineralpine镜像 替换为shshell 作为其主进程。这-doption(的简写--detach) 将容器设置为在后台以分离模式运行,并使用伪 TTY attached (-t).这-i选项设置为 KeepSTDINattached (-i),其中 防止sh进程。

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

$ docker exec -d mycontainer touch /tmp/execWorks

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

接下来,执行交互式shshell 的 shell 中。

$ docker exec -it mycontainer sh

这将在容器中启动一个新的 shell 会话mycontainer.

为 exec 进程设置环境变量 (--env, -e)

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

docker exec命令继承在 创建容器的时间。使用--env(或-e简写)改为 覆盖全局环境变量,或设置其他环境 进程的变量docker exec.

以下示例在容器中创建新的 shell 会话mycontainer, 使用环境变量$VAR_A设置为1$VAR_B设置为2. 这些环境变量仅对sh由该启动的进程docker exec命令,并且对内部运行的其他进程不可用 容器。

$ docker exec -e VAR_A=1 -e VAR_B=2 mycontainer env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=f64a4851eb71
VAR_A=1
VAR_B=2
HOME=/root

提升容器权限 (--privileged)

docker run --privileged.

设置 exec 进程的工作目录 (--workdir, -w)

默认情况下docker exec命令在相同的工作目录中运行,当 容器已创建。

$ docker exec -it mycontainer pwd
/

您可以为命令指定要执行的备用工作目录 使用--workdir选项(或-w简写):

$ docker exec -it -w /root mycontainer pwd
/root

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

如果容器已暂停,则docker exec命令失败并显示错误:

$ docker pause mycontainer
mycontainer

$ docker ps

CONTAINER ID   IMAGE     COMMAND     CREATED          STATUS                   PORTS     NAMES
482efdf39fac   alpine    "/bin/sh"   17 seconds ago   Up 16 seconds (Paused)             mycontainer

$ docker exec mycontainer sh

Error response from daemon: Container mycontainer is paused, unpause the container before exec

$ echo $?
1