语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
OPTIONS说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
编辑 shorthand -h has been deprecated, please use —help
使用: docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
在运行的容器中运行命令
-d | —detach-keys | 分离模式:在后台运行命令 |
---|---|---|
—detach-keys string | 字符串覆盖分离容器的键序列 | |
-e | —env list | 设置环境变量(默认) |
-i | —interactive | 保持STDIN打开,即使没有附加 |
—privileged | 为命令赋予扩展权限 | |
-t | —tty | 分配一个pseudo-TTY |
-u | —user string | 用户名或UID(格式:< name| UID >[: |
-w | —workdir string | 容器内的工作目录 |
实例
在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:
runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
在容器 mynginx 中开启一个交互模式的终端:
docker exec -i -t mynginx /bin/bash
root@b1a0703e41e7:/#
也可以通过 docker ps -a 命令查看已经在运行的容器,然后使用容器 ID 进入容器。
查看已经在运行的容器 ID:
# docker ps -a
…
9df70f9a0714 openjdk “/usercode/script.sh…”
…
第一列的 9df70f9a0714 就是容器 ID。
通过 exec 命令对指定的容器执行 bash:
# docker exec -it 9df70f9a0714 /bin/bash
Docker容器中的root权限获取
有一些操作是经常需要进入到docker容器中操作的,例如突然需要修改某个配置文件等,但是修改该文件是需要root权限,可以参考下面的解决方案
通常修改文件时会提示:read-only file system 或者 Permission denied
通常修改文件时会提示:read-only file system 或者 Permission denied
- 挂载配置文件
在运行docker容器时,可以将该配置文件复制一份到宿主机,然后run的时候,加载-v参数,将宿主机的配置文件挂载到docker中即可。 - 以root权限进入docker容器
命令:docker exec -it -u root <container_id> /bin/bash
注意:
执行上述命令的前提是,run 容器的时候,加上了这个参数:--privileged=true
否则进入到容器中还是提示没有权限修改