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