docker container exec

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

介绍 Docker Debug

要轻松地在任何容器中获取调试 shell,请使用 docker debug。Docker Debug 是 docker exec 调试的替代方案。有了它,您无需修改即可在任何容器或镜像中(即使是轻量级容器或镜像)获取 shell。此外,您还可以在其可自定义的工具箱中携带您喜欢的调试工具。

立即探索 Docker Debug

描述

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

您使用 docker exec 指定的命令只在容器的主进程 (PID 1) 运行时执行,并且如果容器重新启动,它不会重新启动。

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

该命令必须是可执行文件。链式命令或带引号的命令不起作用。

  • 这个可以工作: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

这会从 alpine 镜像创建并启动一个名为 mycontainer 的容器,并以 sh shell 作为其主进程。-d 选项(--detach 的简写)将容器设置为在后台以分离模式运行,并附加一个伪 TTY (-t)。-i 选项设置为保持 STDIN 连接 (-i),这可以防止 sh 进程立即退出。

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

$ docker exec -d mycontainer touch /tmp/execWorks

这会在后台正在运行的容器 mycontainer 中创建一个新文件 /tmp/execWorks

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

$ docker exec -it mycontainer sh

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

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

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

docker exec 命令继承容器创建时设置的环境变量。使用 --env(或简写 -e)可以覆盖全局环境变量,或者为 docker exec 启动的进程设置额外的环境变量。

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

$ 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
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.