HOWTO · Docker
如何在新的 Docker 容器中启动 Bash 终端
本教程演示如何在新的 Docker 容器中启动 bash 终端。
本页内容
若要在 Docker 容器中打开 Bash,请根据容器的状态选择命令。使用 docker run -it IMAGE bash 启动带有交互式 Bash 会话的新容器。使用 docker exec -it CONTAINER bash 在已在运行的容器中启动单独的 Bash 会话。仅当您想将终端连接到容器的主进程时才使用 docker attach CONTAINER;它不会启动另一个 shell。
将 IMAGE 替换为 Docker 可用且包含 Bash 的镜像。将 CONTAINER 替换为运行中容器的名称或 ID。以下命令是语法模板:其占位符必须替换,且它们并非以已执行输出的形式呈现。
使用 Bash 交互式 Shell
当您想要新容器以及其中交互式 Bash 提示符时,请使用 docker run -it IMAGE bash。-i 选项让标准输入保持打开,-t 分配一个终端,使会话的行为如同交互式命令行。bash 是 Docker 在新容器内启动的命令。
例如,将 docker run -it IMAGE bash 中的 IMAGE 替换为镜像名称。镜像必须包含 Bash;最小镜像可能仅提供 sh 或其他 shell。此命令会创建并启动容器,因此与在已存在的容器中打开 shell 不同。如果您想重用已停止的容器,请先启动它,待其运行后再使用 docker exec。
使用 docker exec 命令
使用 docker exec -it CONTAINER bash 以新进程的形式在已在运行的容器中启动 Bash。docker exec 不会启动已停止的容器。若要查找运行中容器的名称与 ID,请使用 docker ps;当您还需要查看已停止的容器时,请使用 docker ps -a。使用 docker start CONTAINER 启动目标已停止容器,然后执行 docker exec 命令。
如果镜像中未安装 Bash,当镜像提供 sh 时,请尝试 docker exec -it CONTAINER sh。Shell 命令必须存在于容器中。两种 docker exec 形式都会创建单独的交互式进程,因此在容器的主进程继续运行时,它们适用于检查或故障排查。
使用 docker attach 命令
使用 docker attach CONTAINER 将终端的输入与输出流连接到运行中容器的主进程。当该进程已提供您所需的交互式会话时,这很有用。例如,如果容器是以 shell 作为主进程启动的,attach 会重新连接到该进程。
Attach 不会启动 Bash 或任何其他新命令。如果容器的主进程是应用程序,attach 会连接到该应用程序的流;它不会给您单独的 shell 提示符。当您需要在主进程之外启动 shell 时,请选择 docker exec -it CONTAINER bash(或可用的 sh)。简而言之:docker run 启动新容器,docker exec 在运行中的容器中启动命令,docker attach 连接到既有的主进程。