全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 5 分钟 ✍️ juanwangdev

容器进入与执行

运行中的容器需要进入执行命令进行调试或管理,下面介绍两种方法。

docker exec

在运行中的容器内执行命令(推荐):

Bash
# 进入容器交互式终端
docker exec -it my-nginx /bin/bash

# 输出
root@a1b2c3d4e5f6:/#

# 执行单条命令
docker exec my-nginx ls /usr/share/nginx/html

# 执行多条命令
docker exec my-nginx sh -c "ls / && cat /etc/nginx/nginx.conf"

# 以 root 用户执行
docker exec -u root my-nginx apt-get update

常用参数

Bash
# -i: 保持标准输入打开
# -t: 分配伪终端
# -d: 后台执行
# -u: 指定用户
# -w: 指定工作目录
# -e: 设置环境变量

docker exec -it -u root -w /tmp -e MY_VAR=hello my-nginx /bin/bash

docker exec 创建新进程,退出后容器继续运行,不影响主进程。

docker attach

连接到容器主进程的终端:

Bash
# 连接到容器
docker attach my-nginx

# 特点:
# - 连接到容器的主进程(PID 1)
# - 看到主进程的标准输出和输入
# - Ctrl+C 会停止容器

docker attach 连接到主进程,Ctrl+C 会终止容器主进程,不推荐用于调试。

exec 与 attach 对比

对比项docker execdocker attach
进程创建新进程连接主进程
退出影响不影响容器可能停止容器
用途调试、执行命令查看主进程输出
安全性
推荐度✅ 推荐⚠️ 谨慎

实用场景

数据库容器

Bash
# 进入 MySQL 容器
docker exec -it my-mysql mysql -uroot -p

# 执行 SQL
docker exec my-mysql mysql -uroot -p123456 -e "SHOW DATABASES;"

# 备份数据库
docker exec my-mysql mysqldump -uroot -p123456 mydb > backup.sql

Web 容器

Bash
# 查看 Nginx 配置
docker exec my-nginx cat /etc/nginx/nginx.conf

# 重新加载 Nginx 配置
docker exec my-nginx nginx -s reload

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

拷贝文件

Bash
# 从容器拷贝文件到宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf

# 从宿主机拷贝文件到容器
docker cp nginx.conf my-nginx:/etc/nginx/nginx.conf

# 拷贝目录
docker cp my-nginx:/var/log/nginx ./nginx-logs

要点总结

  • docker exec 创建新进程执行命令,退出后容器继续运行,推荐使用
  • docker attach 连接主进程终端,Ctrl+C 会停止容器,谨慎使用
  • docker exec 支持 -it-u-w-e 等参数灵活控制执行环境
  • docker cp 可在容器与宿主机之间拷贝文件
  • 生产调试优先使用 docker exec,避免影响容器主进程

📝 发现内容有误?点击此处直接编辑

← 上一篇 容器状态管理
下一篇 → 只读挂载与权限
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库