查看容器状态

STATUS: Up 在运行, Exited 退出了

$ docker ps -a
CONTAINER ID   IMAGE                                         COMMAND                  CREATED       STATUS                   PORTS     NAMES
bb8c03f2b355   gpt                                           "/opt/nvidia/nvidia_…"   4 weeks ago   Up 8 minutes                       gpt_con
7217f169442b   huggingface/transformers-pytorch-gpu:latest   "/opt/nvidia/nvidia_…"   4 weeks ago   Exited (0) 4 weeks ago             eloquent_dubinsky

停止

docker stop <容器名 或 容器ID>

重新运行同一个容器

docker start <容器名 或 容器ID>

进入状态是Up的容器的交互模式

完全可以,这个操作在 Docker 中很常用 👍。

如果容器状态是 Up(正在运行),你可以用 docker execdocker attach 进入它的交互模式。下面我给你详细解释:


docker exec -it(推荐)

docker exec -it <容器名或ID> /bin/bash
  • exec → 在已经运行的容器里执行命令
  • -i → interactive(保持输入)
  • -t → tty(分配一个伪终端)
  • /bin/bash → 进入 bash shell

✅ 优点:安全,不会干扰主进程,可以在容器里执行命令、查看文件、调试程序。

示例:

docker ps
CONTAINER ID   NAMES         STATUS
a1b2c3d4e5f6   my_app        Up 2 hours

docker exec -it my_app /bin/bash

进入容器后,你就能像在 Linux 系统里一样操作:

root@a1b2c3d4e5f6:/# ls
root@a1b2c3d4e5f6:/# python3 trainer_HF.py

进入状态是Exit的容器的交互模式

明白了,你问的是状态是 Exited(已经停止)的容器,想进入交互模式。这个和 Up 容器不一样,因为 Exited 容器主进程已经结束了,所以不能直接用 docker execdocker attach

我给你整理几种方法:


1️⃣ 使用 docker start -ai(前提是主进程不会立即退出)

docker start -ai <容器名或ID>
  • -a → attach(附加到输出)
  • -i → interactive(交互)

注意

  • 如果容器主进程一启动就退出,容器会瞬间退出,你无法进入。
  • 这种方法只适用于容器主进程仍然会运行一段时间的情况。

2️⃣ 启动容器并进入 bash(最常用方法)

因为主进程已经结束,你可以重新启动容器并覆盖主进程,进入 bash:

docker start <container_name>
docker exec -it <container_name> /bin/bash

或者一行:

docker start <container_name> && docker exec -it <container_name> /bin/bash

解释:

  • docker start <container_name> → 启动容器(虽然主进程已经结束,但容器文件系统还在)
  • docker exec -it <container_name> /bin/bash → 启动一个新的 bash 进程,让你进入交互模式

3️⃣ 重新创建一个容器(如果容器立刻退出)

如果容器原来的主进程总是退出,你可以基于这个容器创建一个新的容器来进入:

docker commit <container_name> new_image_name
docker run -it new_image_name /bin/bash

解释:

  • docker commit → 把已退出容器的当前状态保存成一个新镜像
  • docker run -it → 基于这个新镜像启动容器并进入 bash

🔹 总结

容器状态是否能进入方法
Up✅ 可以docker exec -it <name> /bin/bash
Exited❌ 不能直接 exec/attach1. docker start <name> && docker exec -it <name> /bin/bash 2. commit 新镜像再 run

更多推荐