docker 容器执行
描述 | 在正在运行的容器中执行命令 |
---|---|
用法 | docker container exec [OPTIONS] CONTAINER COMMAND [ARG...] |
别名 | docker exec |
Docker Debug 简介
要轻松地将调试 shell 放入任何容器中,请使用
docker debug
.Docker Debug 是docker exec
.有了它,您可以获得 将 shell 放入任何容器或镜像中,甚至是纤薄的容器或镜像,无需修改。 此外,您可以在其可自定义的 工具箱。立即探索 Docker Debug。
描述
这docker exec
command 在正在运行的容器中运行新命令。
您用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, --env | API 1.25+设置环境变量 | |
--env-file | API 1.25+读入环境变量文件 | |
-i, --interactive | 即使未连接,也请保持 STDIN 打开 | |
--privileged | 为命令提供扩展权限 | |
-t, --tty | 分配伪 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
option(的简写--detach
)
将容器设置为在后台以分离模式运行,并使用伪 TTY
attached (-t
).这-i
选项设置为 KeepSTDIN
attached (-i
),其中
防止sh
进程。
接下来,在容器上执行命令。
$ docker exec -d mycontainer touch /tmp/execWorks
这将创建一个新文件/tmp/execWorks
在正在运行的容器内mycontainer
,在后台。
接下来,执行交互式sh
shell 的 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)
设置 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