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 | -d | bool | false | 后台执行命令,不附加到进程 |
--interactive | -i | bool | false | 保持 STDIN 打开,即使没有附加 |
--tty | -t | bool | false | 分配一个伪终端 |
--user | -u | string | - | 用户名或 UID(格式:user 或 uid:gid) |
--workdir | -w | string | - | 设置工作目录 |
--env | -e | list | - | 设置环境变量(格式:KEY=value 或 KEY) |
--privileged | - | bool | false | 赋予命令扩展权限 |
--detach-keys | - | string | ctrl-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.yml2. 数据库操作
sh
# 连接 MySQL
docker exec -it mysql-container mysql -u root -p
# 执行 SQL 脚本
docker exec -i mysql-container mysql -u root -p < script.sql3. 文件操作
sh
# 复制文件到容器
docker cp local-file.txt my-container:/tmp/
# 在容器内编辑文件
docker exec -it my-container vi /app/config.json4. 性能监控
sh
# 查看资源使用
docker exec my-container top
# 查看网络连接
docker exec my-container netstat -tulpn相关命令
- docker run - 运行容器
- docker attach - 附加到容器主进程
- docker cp - 在容器和本地文件系统间复制文件
- docker logs - 查看容器日志
BSFC Tech Pro Tip
在生产环境中,建议使用 docker exec 而不是 docker attach 进行调试,因为 exec 不会影响容器的主进程。同时,使用 -u 选项以非 root 用户执行命令可以提高安全性。