Skip to content

docker exec

在运行中的容器内执行命令。

使用方法

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

描述

docker exec 命令在运行中的容器内执行新命令。这对于调试、查看日志、执行维护任务等非常有用。

提示

docker exec 只能在运行中的容器内执行命令。如果容器已停止,请先使用 docker start 启动容器。

基本示例

sh
# 在容器内执行命令
docker exec my-container ls -la

# 交互式执行(进入容器)
docker exec -it my-container /bin/bash

# 以特定用户执行
docker exec -u root my-container whoami

# 在后台执行
docker exec -d my-container touch /tmp/file.txt

选项说明

参数简写类型默认值描述
--detach-dboolfalse后台执行命令,不附加到进程
--interactive-iboolfalse保持 STDIN 打开,即使没有附加
--tty-tboolfalse分配一个伪终端
--user-ustring-用户名或 UID(格式:useruid:gid
--workdir-wstring-设置工作目录
--env-elist-设置环境变量(格式:KEY=valueKEY
--privileged-boolfalse赋予命令扩展权限
--detach-keys-stringctrl-p,ctrl-q覆盖用于分离容器的键序列

常用组合示例

进入容器 Shell

sh
# 进入容器的 Bash
docker exec -it my-container /bin/bash

# 进入容器的 Sh(Alpine 镜像)
docker exec -it my-container /bin/sh

# 进入容器并切换到特定目录
docker exec -it -w /app my-container /bin/bash

执行单次命令

sh
# 查看文件列表
docker exec my-container ls -la /app

# 查看环境变量
docker exec my-container env

# 查看进程
docker exec my-container ps aux

# 查看网络配置
docker exec my-container ip addr

以特定用户执行

sh
# 以 root 用户执行
docker exec -u root my-container whoami

# 以特定 UID 执行
docker exec -u 1000 my-container id

后台执行

sh
# 在后台创建文件
docker exec -d my-container touch /tmp/backup.lock

# 在后台运行脚本
docker exec -d my-container /app/scripts/backup.sh

设置环境变量

sh
# 执行时设置环境变量
docker exec -e NODE_ENV=production my-container node app.js

与 docker attach 的区别

命令用途特点
docker exec在容器内执行新命令创建新进程,不影响主进程
docker attach附加到容器主进程连接到现有进程,退出会停止容器

注意

使用 docker attach 时,如果退出(如按 Ctrl+C),可能会停止容器的主进程。建议使用 docker exec 进行调试。

退出容器

在交互式会话中,可以使用以下方式退出:

  • 输入 exit 或按 Ctrl+D - 正常退出
  • Ctrl+P 然后 Ctrl+Q - 分离容器(容器继续运行)

常见使用场景

1. 调试应用

sh
# 查看应用日志
docker exec my-container tail -f /var/log/app.log

# 检查配置文件
docker exec my-container cat /etc/app/config.yml

2. 数据库操作

sh
# 连接 MySQL
docker exec -it mysql-container mysql -u root -p

# 执行 SQL 脚本
docker exec -i mysql-container mysql -u root -p < script.sql

3. 文件操作

sh
# 复制文件到容器
docker cp local-file.txt my-container:/tmp/

# 在容器内编辑文件
docker exec -it my-container vi /app/config.json

4. 性能监控

sh
# 查看资源使用
docker exec my-container top

# 查看网络连接
docker exec my-container netstat -tulpn

相关命令

BSFC Tech Pro Tip

在生产环境中,建议使用 docker exec 而不是 docker attach 进行调试,因为 exec 不会影响容器的主进程。同时,使用 -u 选项以非 root 用户执行命令可以提高安全性。

由 BSFC Tech 提供技术支持