docker exec
在运行的容器中执行命令
$ docker exec [options] container command [arg...]
名称 | 默认 | 描述 |
---|---|---|
--detach, -d | 后台运行模式,在后台执行命令相关命令 | |
--detach-keys | 覆盖容器后台运行的一些参数信息 | |
--env, -e | 设置环境变量 | |
--interactive, -i | 展示容器输入信息STDIN | |
--privileged | 为命令提供一些扩展权限 | |
--tty, -t | 命令行交互模式 | |
--user, -u | 设置用户名(format: <name|uid>[:<group|gid>]) | |
--workdir, -w | 指定容器内的目录 |
docker exec
是需要容器处于运行中且PID 1
进程也处于运行中才能执行的操作。命令执行后会进入容器的默认工作目录,如果在Dockerfile
中指定了工作目录,则会进入Dokcerfile
指定的目录,如果命令中指定了工作目录-w
则会进入该目录。
- docker run;创建和启动一个新的容器实例,操作对象是镜像,选项较多,如果你要创建和启动一个容器,只能用run;
- docker exec: 在已运行的容器中,执行命令,操作对象是容器,如果你要进入已运行的容器,并且执行命令,用exec;
docker run
docker run -p 80:80 -d --name=nginx-1 nginx // 在后台创建和启动容器nginx-1,不执行命令
docker run -p 81:80 -d --name=nginx-2 nginx bash -c 'ls & tail -f /dev/null' // 在后台创建和启动容器nginx-2,同时执行组合命令
docker logs nginx-2 // 查看命令输出,可以看到ls执行的结果
docker exec
docker run -p 82:80 -d --name=nginx-3 nginx
docker exec -it nginx-3 /bin/bash // 直接进入容器nginx-3,执行bash
docker exec nginx-3 bash -c "ls" // 在容器中执行命令 ls,输出结果