Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker exec 常用命令。

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 (格式:

<name|uid>[:<group|gid>]

)

--workdir , -w

容器内的工作目录

--help

打印使用方法

推荐文档

相关文档

大家感兴趣的内容

随机列表