docker exec -it 是进入运行中 Java 容器调试、查日志或改配置的标准方式,通过启动新进程实现交互,不干扰主应用;需确保容器状态为 Up,常用 /bin/sh(非 bash),支持 -u、-w、-e 等参数提升调试效率。

Java 应用跑在 Docker 容器里时,想进容器调试、查日志或改配置,不能靠“登录”概念,得用 docker exec -it 启一个新进程。它不干扰 Java 主进程(比如 Spring Boot 的 jar 启动的服务),退出终端后容器照常运行。
确认容器状态和基础命令格式
先确保目标容器正在运行:
- 运行
docker ps查看 CONTAINER ID 或 NAMES,状态必须是 Up - 停止或暂停的容器无法执行
exec—— 这是硬性限制 - 基本命令结构:
docker exec [选项] 容器名或ID 启动命令
用 -it 进入交互式终端的关键细节
-it 是两个参数的组合,不是可选修饰,缺一不可:
-
-i(interactive):保持标准输入(STDIN)打开,让你能敲命令 -
-t(tty):分配伪终端,提供类似 Linux shell 的提示符和行编辑能力 - 常见启动命令:多数镜像支持
/bin/bash,Alpine 类则常用/bin/sh - 例如:
docker exec -it my-java-app /bin/bash
针对 Java 容器的实用技巧
Java 镜像(如 openjdk、eclipse-temurin)通常不含 bash,但一定有 sh;如果报错 bash: not found,直接换 sh:
立即学习“Java免费学习笔记(深入)”;
docker exec -it my-java-app /bin/sh- 想以 root 权限操作(比如修改配置文件):
docker exec -it -uroot my-java-app /bin/sh - 快速查看应用日志目录:
docker exec -it -w /app my-java-app ls -l(-w指定工作目录) - 临时注入环境变量调试:
docker exec -it -e DEBUG=true my-java-app /bin/sh
避免踩坑的注意事项
几个容易忽略但影响体验的点:
- 别用
docker attach替代exec -it—— attach 连的是容器主进程的 stdin/stdout,退出可能终止 Java 进程 - 每次
exec都新建一个 tty,多个终端互不影响,适合并行调试 - 容器内没有安装 vim/nano?可用
cat或echo查看/覆盖简单配置,或用apk add nano(Alpine)临时补工具 - 退出终端用
exit或Ctrl+D,不会停容器


















