首页/云/云与容器速查/docker exec 进入容器执行命令
容器与 Docker106 条

docker exec 进入容器执行命令

在运行中的容器内执行命令(最常用是 -it 开 shell 排查问题);exec 不改容器状态,退出不会停容器,与 attach 有本质区别。

云与容器速查云更新于 2026-10-13

docker exec 是干什么的

docker exec 在运行中的容器里执行一条命令,最常用的用法是开一个交互式 shell 进去排查问题。它启动的是容器内的新进程,不改动容器本身的启动配置,退出 shell 也不会把容器停掉,这一点与 attach 有本质区别:attach 是接到容器主进程的输入输出上,误按中断键可能直接把主进程干掉。

基本信息

基本语法docker exec [选项] 容器 命令 [参数]
高频组合-it 交互终端 / -u 指定用户 / -w 指定工作目录 / -e 追加环境变量
前提条件容器必须处于运行状态,否则报错提示容器未运行
可用 shell精简镜像常只有 sh 没有 bash,进不去时先试 sh
非交互用法docker exec 容器 命令 一次执行并返回结果,适合脚本
执行身份默认是镜像里配置的用户,很多操作需要显式加 -u root

典型使用场景

  • 排查运行中的服务:进容器看进程、端口、配置文件与运行时目录的实际状态
  • 验证环境变量与挂载是否按预期生效,确认配置文件里的内容与期望一致
  • 连数据库或缓存客户端做连通性测试,判断是网络问题还是应用问题
  • 在容器内执行一次性数据修复脚本,比重新构建镜像再发布快得多
  • 抓取诊断信息:把日志、进程列表、网络状态输出到终端或重定向到文件
  • 模拟应用视角:以容器内用户身份测试文件权限与目录可写性

常用选项速查

选项作用使用注意
-it分配交互终端脚本里不要加,会挂住等待输入
-u root以指定用户执行排查权限问题时最常用
-w 目录指定工作目录避免每次都先 cd 再执行命令
-e 键=值追加环境变量只影响这次执行,不改容器配置
--privileged特权模式执行风险高,仅在确有必要时短暂使用

常用示例

常用示例
docker exec -it myapp sh                        # 进入容器(先试 sh,不一定有 bash)
docker exec -it -u root myapp bash              # 以 root 身份进入排查权限问题
docker exec myapp env | grep -i path            # 看运行时环境变量
docker exec -w /app myapp ls -al                # 指定目录执行命令
docker exec myapp cat /etc/nginx/conf.d/default.conf   # 核对容器内实际配置
# 排查完记得退出,exec 不会影响容器状态
exec 开的是新进程,它看到的环境与容器主进程可能有差异:环境变量来自容器配置,但 shell 初始化与工作目录不同,排查时以主进程视角为准。
用 exec 做的修改会随容器销毁而丢失,也与最终镜像不一致。临时验证可以,正式变更必须回到镜像构建或编排配置里。
优先用 exec 而不是 attach:attach 连接的是容器主进程,输入输出都指向它,误按中断键可能让主进程收到信号直接退出。
容器里能用的工具取决于镜像:精简镜像可能没有 curl、netstat、ps。必要时临时装包验证,但不要把它当成长期运维手段。

排查时的注意点

  • 先确认容器处于运行状态,否则命令会直接失败
  • 优先尝试更简易的 shell,精简镜像通常没有完整 shell
  • 执行命令前加分隔符,避免参数被工具自身吃掉
  • 临时改动要回到配置仓库,否则重建后问题重现
  • 涉及写操作时先确认影响范围,只读排查优先
  • 把有价值的输出导出保存,容器重建后现场就不再存在

易错点

  • 镜像里没有 bash 只有 sh,直接 exec bash 报找不到命令,误以为容器坏了
  • 用 attach 进去调试并误按中断键,把容器主进程直接杀掉
  • 把 exec 里的临时修改当正式配置,容器一重建改动全部消失
  • 在容器内以 root 身份改文件权限,重建后权限又回到镜像里的状态,问题反复出现
  • 在脚本里对未运行的容器执行 exec,命令失败但被忽略,后续步骤拿到空结果

数据来源与参考

  • Docker Docs:docker exec

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌