参考: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