首页/云/Docker 容器速查/docker attach 附着到容器主进程
基础命令50 条

docker attach 附着到容器主进程

占用当前终端直接连接容器的标准输入输出;与 exec 的关键区别是它连着主进程,按键信号会直接传给服务。

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

docker attach 是什么

attach 把当前终端直接接到容器的标准输入输出上,相当于你坐在容器主进程(PID 1)的终端前面:它的日志直接刷在你屏幕上,你敲的键送进它的标准输入,你按的 Ctrl-C 会变成信号发给它。这与 docker exec 有本质区别——exec 是在容器里另开一个进程,attach 是与主进程共用同一个终端。也正因为连着主进程,attach 的操作带有停服务风险。

基本信息

语法docker attach [--detach-keys=按键] [--no-stdin] [--sig-proxy=true|false] 容器
脱离方式默认组合键 Ctrl-P Ctrl-Q,脱离而不停止容器
前置条件容器以交互或前台方式运行且已启用标准输入
日志驱动限制使用 syslog、journald 等非本地驱动时无法 attach
信号行为默认 sig-proxy=true,终端信号会转发给容器主进程
Linux 常用docker attach $(docker ps -q -f name=web)

典型使用场景

  • 观察一个前台运行进程的实时输出,比反复 logs 更连续
  • 需要与主进程交互的场景:交互式容器、需要键盘输入的命令行程序
  • 临时接手一个启动脚本的确认提示,例如等待用户按回车继续
  • 配合 --no-stdin 纯看输出,避免误触键盘影响运行中的服务
  • 排查终端相关问题时验证容器的标准流是否正常

附着、脱离与调整

附着、脱离与调整
# 附着到容器主进程;Ctrl-P Ctrl-Q 脱离,容器继续运行
docker attach web

# 只看输出不接管标准输入,防止误敲命令影响服务
docker attach --no-stdin web

# 换一个不容易误触的脱离组合键
docker attach --detach-keys='ctrl-d' web

# 想只看日志又怕误操作,优先用 logs 而不是 attach
docker logs -f --tail 50 web

# 真要排查问题用 exec 另开进程,不影响主进程
docker exec -it web sh

两种接入方式对比

维度docker attachdocker exec
连接的进程容器主进程 PID 1容器内新开的进程
对服务影响键盘信号直接影响主进程不影响主进程
Ctrl-C 后果默认会让主进程收到中断只影响新开的进程
脱离方式Ctrl-P Ctrl-Q 组合键直接退出即可
适用场景看输出、与主进程交互进容器排查与运维
attach 之后终端里敲的字符会进入容器进程的标准输入,生产排障建议先加 --no-stdin,确认安全后再决定是否接管输入。
许多服务的日志走非本地日志驱动或输出到文件,attach 里可能什么都看不到;这时应查日志驱动配置或容器内日志文件,而不是反复重试 attach。

易错点

  • 记不清脱离组合键就按 Ctrl-C,会把中断信号发给主进程直接停掉服务,先在测试容器练熟再上生产
  • 多个终端同时 attach 同一容器会共享输出并竞争输入,不适合多人同时操作
  • 把 attach 当日常运维入口使用,容易误停服务;日常排查应优先 exec 与 logs
  • 容器以 --detach 启动且未启用标准输入时,attach 后无法交互,需要重建容器才能接管输入

数据来源与参考

  • Docker 官方 CLI 参考:docker attach(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌