1、docker exec 简介
docker exec
用于在正在运行的容器中执行命令。docker exec
命令在正在运行的容器中运行新命令。使用docker exec
启动的命令只在容器的主进程(PID 1
)运行时运行,如果容器重启,则不会重启。命令在容器的默认目录中运行。如果底层镜像在其Dockerfile中使用WORKDIR指令指定了自定义目录,则使用该目录。命令必须是可执行文件。链接或引用的命令不起作用。例如,docker exec -it my_container sh -c "echo a && echo b"
可以运行,但 docker exec -it my_container "echo a && echo b"
不能运行。
2、docker exec 语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
参考文档:https://docs.docker.com/engine/reference/commandline/exec/
3、docker exec 命令
1)在运行中的容器上运行docker exec
docker run --name mycontainer -d -i -t alpine /bin/sh docker exec -d mycontainer touch /tmp/execWorks docker exec -it mycontainer sh
2)设置exec进程的环境变量(--env, -e)
使用--env
(或简写的-e
)覆盖全局环境变量,或者为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
3)设置exec进程的工作目录(--workdir, -w)
默认情况下,docker exec
命令在创建容器时的工作目录集中运行,
docker exec -it mycontainer pwd /
可以使用--workdir
选项(或者简写的-w
)指定另一个要执行命令的工作目录,
docker exec -it -w /root mycontainer pwd /root
4)尝试在一个暂停的容器上运行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
4、选项说明
命令 | 描述 |
--detach , -d | 分离模式:在后台执行命令 |
--detach-keys | 覆盖分离容器的键序列 |
--env , -e | 设置环境变量 |
--env-file | 读入一个环境变量文件 |
--interactive , -i | 保持STDIN打开,即使没有连接 |
--privileged | 赋予命令扩展权限 |
--tty , -t | 分配一个伪tty |
--user , -u | Username 或 UID (格式:
) |
--workdir , -w | 容器内的工作目录 |
--help | 打印使用方法 |