docker exec :在运行的容器中执行命令

语法

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

  1. 挂载配置文件
    在运行docker容器时,可以将该配置文件复制一份到宿主机,然后run的时候,加载-v参数,将宿主机的配置文件挂载到docker中即可。
  2. 以root权限进入docker容器
    命令:
    docker exec -it -u root <container_id> /bin/bash
    注意:
    执行上述命令的前提是,run 容器的时候,加上了这个参数:--privileged=true 否则进入到容器中还是提示没有权限修改