docker container exec
说明 | 在运行中的容器内执行命令 |
---|---|
用法 | docker container exec [选项] 容器 命令 [参数...] |
别名 | 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, --env | API 1.25+ 设置环境变量 | |
--env-file | API 1.25+ 读取包含环境变量的文件 | |
-i, --interactive | 即使未附加,也保持 STDIN 开启 | |
--privileged | 赋予命令扩展权限 | |
-t, --tty | 分配一个伪终端 (pseudo-TTY) | |
-u, --user | 用户名或 UID (格式:<name|uid>[:<group|gid>] ) | |
-w, --workdir | API 1.35+ 容器内的工作目录 |
示例
在运行中的容器上运行 docker exec
首先,启动一个容器。
$ docker run --name mycontainer -d -i -t alpine /bin/sh
这会创建一个名为 mycontainer
的容器,使用 alpine
镜像,以 sh
Shell 作为其主进程,并启动该容器。-d
选项(--detach
的简写)设置容器在后台运行,处于分离模式,并附加一个伪终端 (-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)
为 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