参考:https://docs.docker.com/engine/reference/commandline/exec/

一、描述

在正在运行的容器中运行命令

二、用法

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

三、选项

四、扩展描述

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

1、启动一个容器

$ docker run --name ubuntu_bash --rm -i -t ubuntu bash

这将创建一个名为ubuntu_bash的容器并启动Bash会话。

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

$ docker exec -d ubuntu_bash touch /tmp/execWorks

这将在后台运行的容器ubuntu_bash中创建一个新文件/tmp/execWorks。

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

$ docker exec -it ubuntu_bash bash

这将在容器ubuntu_bash中创建一个新的Bash会话。

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

$ docker exec -it -e VAR=1 ubuntu_bash bash

这将在容器ubuntu_bash中创建一个新的Bash会话,环境变量$VAR设置为“1”。请注意,此环境变量仅在当前Bash会话中有效。

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

$ docker exec -it ubuntu_bash pwd
/

您可以为要执行的命令选择工作目录

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

2、尝试在暂停的容器上运行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

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐