1. docker exec

1.1. 描述

在运行的容器中执行命令

docker exec 是需要容器处于运行中且 PID 1 进程也处于运行中才能执行的操作。

命令执行后会进入容器的默认工作目录,如果在 Dockerfile 中指定了 WORKDIR 工作目录,则会进入 Dokcerfile 指定的目录,如果命令中指定了工作目录 -w 则会进入该目录。

1.2. 帮助

$ docker exec --help

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

Options:
  -d, --detach Detached mode: run command in the background
      --detach-keys string Override the key sequence for detaching a container
  -e, --env list Set environment variables
  -i, --interactive Keep STDIN open even if not attached
      --privileged Give extended privileges to the command
  -t, --tty Allocate a pseudo-TTY
  -u, --user string Username or UID (format: <name|uid>[:<group|gid>])
  -w, --workdir string Working directory inside the container

1.3. 选项

选项 描述
--detach, -d 后台运行模式,在后台执行命令相关命令
--detach-keys 指定容器退出时使用的快捷键
--env, -e API 1.25+ 设置环境变量
--env-file API 1.25+ 通过一个文件读取加载环境变量
--interactive, -i 展示容器输入信息 STDIN,即使没有附加也保持 STDIN 标准输入打开
--privileged 为命令提供一些扩展权限
--tty, -t 命令行交互模式,分配一个伪终端
--user, -u 设置用户名(format: [:])
--workdir, -w API 1.35+ 指定容器内的工作目录

1.4. 示例

1.4.1. 在运行的容器中执行 docker run

创建一个容器,名称为 ubuntu_bash

$ docker run --name ubuntu_bash --rm -i -t ubuntu bash

在后台执行命令创建一个文件

这样可以在 ubuntu_bash 容器中创建一个 /tmp/execWorks 普通文件

$ docker exec -d ubuntu_bash touch /tmp/execWorks

在连接标准输出和配置一个 TTYP 终端

在容器中执行 bash 命令,这样可以登录到容器中分配一个 bash 的 shell 终端,也是常用的登录容器的方法

$ docker exec -it ubuntu_bash bash

登录容器时,可以通过 -e 加载环境变量

可以指定多次,配置多个环境变量。

也可以使用 --env-file 一次性批量添加环境变量

需要注意的时,环境变量的配置只适用于本次会话。即退出后丢失,其他会话不可访问

$ docker exec -it -e VAR=1 ubuntu_bash bash

登录到容器中,会有默认的工作目录

比如在 Dockerfile 中定义的 WORKDIR

或者在 docker create 或 docker run 中定义的 WORKDIR

··· $ docker exec -it ubuntu_bash pwd / ···

也可以在登录容器时,临时指定一个工作目录配置

$ docker exec -it -w /root ubuntu_bash pwd
/root

1.4.2. 在停止的容器中执行 docker run

如果容器处于停止的状态,是无法使用 docker exec 登录到容器中的。

如果执行命令登录一个已经停止的容器,会获得一个异常的报错信息。

$ docker pause test

test

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
1ae3b36715d2        ubuntu:latest       "bash"              17 seconds ago      Up 16 seconds (Paused)                       test

$ docker exec test ls

FATA[0000] Error response from daemon: Container test is paused, unpause the container before exec

$ echo $?
1
Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-03-13 11:28:02

results matching ""

    No results matching ""