在 Docker 中进入正在运行的容器有多种方式,以下是几种常用的方法:
docker exec
(推荐方式)docker exec -it <容器ID或名称> /bin/bash
-it
:表示交互式终端(-i
保持 STDIN 打开,-t
分配伪终端)。/bin/bash
:启动容器的默认 Shell(也可能是 /bin/sh
或其他 Shell)。bash
docker exec -it my_nginx_container /bin/bash
适用场景:
- 容器已运行且需要交互式操作(如调试、查看日志、修改配置等)。
docker attach
(不推荐常规使用)docker attach <容器ID或名称>
Ctrl+C
)可能导致容器停止(取决于主进程的行为)。适用场景:
- 需要实时查看主进程的输出(如调试服务日志)。
nsenter
(底层工具)docker inspect -f '{{.State.Pid}}' <容器ID或名称> # 获取容器的PID
nsenter -t <容器PID> -m -u -n -i /bin/bash
nsenter
:直接进入容器的命名空间(需提前安装 util-linux
包)。-t
:目标进程 PID-m -u -n -i
:挂载 Mount/UTS/Network/IPC 命名空间。适用场景:
- 需要更底层的调试(如网络或文件系统隔离问题)。
docker ps
确认容器状态,停止的容器无法进入。/bin/bash
或 /bin/sh
,需指定其他可执行文件(如 docker exec -it <容器> sh
)。# 进入容器并检查配置文件
docker exec -it nginx_container bash
cat /etc/nginx/nginx.conf
# 实时查看日志(不进入容器)
docker logs -f nginx_container
根据需求选择合适的方式,docker exec
是大多数场景下的首选。