# Docker exec 命令

[Docker命令大全](/docker/manual/docker-command-manual.md)

`docker exec` 命令用于在运行中的容器内执行一个新的命令。这对于调试、运行附加的进程或在容器内部进行管理操作非常有用。

### 语法

docker exec \[OPTIONS] CONTAINER COMMAND \[ARG...]

### 常用参数

* `-d, --detach`: 在后台运行命令。
* `--detach-keys`: 覆盖分离容器的键序列。
* `-e, --env`: 设置环境变量。
* `--env-file`: 从文件中读取环境变量。
* `-i, --interactive`: 保持标准输入打开。
* `--privileged`: 给这个命令额外的权限。
* `--user, -u`: 以指定用户的身份运行命令。
* `--workdir, -w`: 指定命令的工作目录。
* `-t, --tty`: 分配一个伪终端。

### 实例

在容器内运行命令：

```shell
docker exec my_container ls /app
```

在运行中的 my\_container 容器内执行 ls /app 命令，列出 /app 目录的内容。

以交互模式运行命令：

```shell
docker exec -it my_container /bin/bash
```

在运行中的 my\_container 容器内启动一个交互式的 Bash shell。-i 保持标准输入打开，-t 分配一个伪终端。

在后台运行命令：

```shell
docker exec -d my_container touch /app/newfile.txt
```

在运行中的 my\_container 容器内后台执行 touch /app/newfile.txt 命令，创建一个新文件。

设置环境变量：

```shell
docker exec -e MY_ENV_VAR=my_value my_container env
```

在运行中的 my\_container 容器内执行 env 命令，并设置环境变量 MY\_ENV\_VAR 的值为 my\_value。

以指定用户身份运行命令：

```shell
docker exec -u user123 my_container whoami
```

在运行中的 my\_container 容器内以 user123 用户身份执行 whoami 命令。

指定工作目录：

```shell
docker exec -w /app my_container pwd
```

在运行中的 my\_container 容器内以 /app 目录为工作目录执行 pwd 命令。

### 使用场景

* **调试容器**: 进入容器内部进行调试和排查问题。
* **管理任务**: 在容器内运行附加的管理任务或维护操作。
* **监控和检查**: 在容器内执行监控和检查命令，获取运行状态和日志。

### 总结

`docker exec` 命令是 Docker 中非常强大的工具，允许用户在运行中的容器内执行额外的命令。这对于调试、管理和维护容器非常有用，能够帮助用户更灵活地控制和操作容器内部的环境。

### attach与 exec -it 区别

| **功能点**     | **docker attach**            | **docker exec -it** |
| ----------- | ---------------------------- | ------------------- |
| **目标**      | 连接到容器的主进程                    | 在容器内启动一个新的进程        |
| **交互模式**    | 使用主进程的 STDIN、STDOUT 和 STDERR | 可启动交互式终端（如 bash/sh） |
| **对主进程的影响** | 可能干扰主进程                      | 不会干扰主进程             |
| **新进程支持**   | 不支持                          | 支持                  |
| **适用场景**    | 查看容器启动日志，直接交互主进程             | 调试、执行命令或管理容器环境      |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tuonioooo-notebook.gitbook.io/docker/manual/docker-exec-command.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
