Docker的exec命令
Docker的exec命令
介绍
https://docs.docker.com/engine/reference/commandline/exec/
在运行的容器内运行命令
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 [OPTIONS] CONTAINER COMMAND [ARG...]
常用的命令行参数:
参数 | 描述 |
---|---|
–detach , -d | Detached mode: run command in the background |
–env , -e | Set environment variables |
–interactive , -i | Keep STDIN open even if not attached |
–privileged | Give extended privileges to the command |
–tty , -t | Allocate a pseudo-TTY |
–user , -u | Username or UID (format: <name|uid>[:<group|gid>]) |
–workdir , -w | Working directory inside the container |
启动命令
先启动一个容器:
$ docker run -it --rm --name exectest ubuntu bash
root@f13ee9356da6:/#
用docker ps命令确认一下:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f13ee9356da6 ubuntu "bash" 24 seconds ago Up 22 seconds exectest
运行简单命令:
$ docker exec exectest pwd
/
$ docker exec exectest ls /
bin
boot
dev
etc
......
如果想后台执行:
$ docker exec -d exectest pwd
也可以用进到容器里面,打开bash,再慢慢执行命令:
$ docker exec -it exectest bash
root@f13ee9356da6:/# pwd
/
这会在容器 exectest 里面创建一个新的bash session。
可以在进入容器时定义一些环境变量,通过 -e 参数传递进去:
$ docker exec -it -e var1=v1 exectest bash
root@f13ee9356da6:/# echo $var1
v1
注意这个环境变量只有在这个新的bash session里面才能看到,在原来打开这个容器的bash里面是无法看到的。
默认新的 bash session 的工作目录是在当前容器被创建时设置的工作目录,可以通过 -w 参数修改:
$ docker exec -it -w /root exectest bash
root@f13ee9356da6:~# pwd
/root