进入 Docker 容器的 Shell
-
使用
docker exec
进入 Docker 容器的 Shell -
使用
docker container attach
进入 Docker 容器的 Shell - 使用安全 Shell (SSH) 进入 Docker 容器的 Shell
本教程将演示如何使用多种方式进入 Docker 的容器 Shell。
使用 docker exec
进入 Docker 容器的 Shell
我们需要启动并运行一个容器才能使用此命令。我们可以使用以下命令检查系统中容器的状态。
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38086474cb6c debian "bash" 2 days ago Exited (0) 2 days ago epic_jackson
1c955bac1a84 ubuntu "bash" 2 days ago Exited (0) 2 days ago musing_morse
1296f9b9d330 nginx "/docker-entrypoint.…" 2 days ago Exited (255) 2 days ago 80/tcp distracted_napier
如果我们没有运行容器,我们可以轻松创建一个。我们将使用 rabbitmq
基础镜像来设置一个容器。
在创建容器之前,我们将首先使用 docker pull
命令从注册表中提取基础映像,如下所示。
$ docker run -d rabbitmq
输出:
Dcad9f270643802092ab525796897c357026767863dade831e8c7d7d82c45712
现在,我们应该有一个正在运行的容器。再一次,我们可以确定使用 docker ps
命令。
$ docker ps -a
输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcad9f270643 rabbitmq "docker-entrypoint.s…" About a minute ago Up 57 seconds 4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp inspiring_moore
我们将使用 -it
标签旁边的 docker exec
命令进入容器,与文件交互或执行一些调试。
exec
命令将允许我们在正在运行的容器中执行命令,而 -it
标签将使我们能够交互地打开容器。
最后,sh
命令将打开一个基本的 shell 提示符以在容器中运行我们的命令。
isaactonyloi@DESKTOP-HV44HT6:~$ docker exec -it dcad9f270643 sh
#
现在我们已经进入了 Docker 容器,我们可以在容器中运行各种命令。键入 exit
命令并从该模式按回车键返回主终端。
使用 docker container attach
进入 Docker 容器的 Shell
我们还可以使用 docker container attach
命令连接到正在运行的容器。这允许我们使用容器的 ID 将终端输出、输入和错误流附加到正在运行的容器。
然后我们可以运行各种命令,接受输入,调试指定的容器。如前所述,我们需要一个正在运行的容器来附加我们的输出、输入和错误流。
为此,我们将使用 docker ps
,如下所示。我们仍在使用上一节中的 rabbitmq
容器。
$ docker ps -a
输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcad9f270643 rabbitmq "docker-entrypoint.s…" 39 minutes ago Up 38 minutes 4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp inspiring_moore
如果 docker 容器已经停止,那么在这种情况下,我们需要首先使用 docker start
命令启动它,就像我们在这里所做的那样。
$ docker start dcad9f270643
dcad9f270643
现在,如果 docker 容器没有按预期工作,我们可以运行 docker container attach
来查看容器内发生了什么。
$ docker container attach dcad9f270643
输出:
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0> Server startup complete; 3 plugins started.
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0> * rabbitmq_prometheus
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0> * rabbitmq_web_dispatch
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0> * rabbitmq_management_agent
使用安全 Shell (SSH) 进入 Docker 容器的 Shell
最后,我们还可以使用通常缩写为 SSH 的安全 shell 在容器内执行命令。但是,这是最不推荐的方式,因为它会导致基础映像膨胀以及我们可能遇到的配置问题。
此外,这种方法存在安全问题,因为我们需要自己管理密钥。我们还需要考虑到某些镜像可能本质上不支持此方法,因此可能需要进一步配置。
但是,如果我们需要使用这种方法,我们必须遵循这些步骤。
-
我们首先需要安装并启用 SSH 服务。
-
然后,我们必须检索容器的 IP 地址。
-
最后,我们使用检索到的 IP 地址 SSH 进入容器。
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedIn