首页/云/云与容器速查/进不去容器:没有 shell 或无法 exec

进不去容器:没有 shell 或无法 exec

exec 报 not found 或 OCI runtime error:精简镜像没有 shell、容器已停/暂停、进程空间受限。换思路:宿主机 nsenter、临时调试容器、或调整镜像带工具。

云与容器速查云更新于 2026-10-12
没 shelldistroless/scratch:不提供 sh;用 docker run --entrypoint 测不了
容器已停exec 只对运行中容器有效;先 start 或看日志
nsenter 方案宿主 docker inspect 取 PID:nsenter -t <PID> -m -u -i -n -p sh
临时容器docker run --rm -it --network container:<目标> --pid container:<目标> nicolaka/netshoot
K8s 侧kubectl debug 注入临时容器(见 kubectl-debug 条目)

nsenter 进入无 shell 容器空间

nsenter 进入无 shell 容器空间
PID=$(docker inspect -f '{{.State.Pid}}' myapp)
sudo nsenter -t $PID -m -u -i -n -p sh
docker run --rm -it --network container:myapp --pid container:myapp nicolaka/netshoot
nsenter 需要宿主 root:这是特权操作,生产环境要留操作记录并限制账号。

易错点

  • 官方 distroless 镜像里找 sh:不存在,浪费排查时间
  • exec 报容器未运行却以为是权限问题:先 docker ps 看状态

数据来源与参考

  • Docker Docs:docker exec
  • util-linux 文档(nsenter)

相关工具

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