如何连接到Docker容器

当您想查看容器内部正在发生什么时,连接到正在运行的Docker容器会很有帮助。 如果Docker容器无法按预期工作,则可以将其连接到该容器或获取一个Shell到该容器并运行以下命令 ps 要么 top。 您还可以输入容器,安装新软件包,并从中构建新的Docker映像。

在本教程中,我们将说明如何附加到容器的主要运行过程以及如何将外壳安装到正在运行的容器。

附加到容器上

尽管可以在一个容器中运行多个进程,但大多数docker容器仅运行一个进程。 启动容器时执行的命令使用 ENTRYPOINT 和/或 RUN 指令。

docker attach 命令允许您将终端连接到正在运行的容器。 当您想实时查看标准输出中写的内容或以交互方式控制过程时,此功能很有用。

为了更好地了解 attach 命令起作用,让我们使用官方的Nginx映像运行一个新的分离的Nginx容器。

docker container run --name my_nginx -d -p 8080:80 nginx

-p 8080:80 选项告诉Docker将容器中的端口80映射到主机上的端口8080。

列出容器以确保“ my_nginx”容器正在运行:

docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
8e1c4974a8d8        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 2 seconds        0.0.0.0:8080->80/tcp   my_nginx

使用容器的ID或名称附加到容器:

docker container attach my_nginx

运行容器时执行的Nginx图像的默认命令设置为 CMD ["nginx", "-g", "daemon off;"]。 当您运行 attach 命令您的终端附加到 nginx 处理。

打开 127.0.0.1:8080 在浏览器中,您可以实时观看nginx进程的输出。

192.168.33.1 - - [04/Oct/2019:21:12:28 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
192.168.33.1 - - [04/Oct/2019:21:12:28 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

要访问容器日志,您应该首选使用 docker logs 命令。

要从容器上卸下而不停止容器,请使用 CTRL-p CTRL-q 组合键。 紧迫 CTRL-c 停止容器。

如果要附加的正在运行的进程接受输入,则可以向其发送指令。

将外壳带到容器#

docker exec command允许您在正在运行的容器中运行命令。

看看如何 exec 该命令起作用,以及如何使用该命令进入容器外壳,首先,启动一个新容器。 我们将使用官方的MySQL映像:

docker container run --name my_mysql -d mysql

这将创建一个名为“ my_mysql”的容器。

要在容器内执行命令,请运行以下命令:

docker container exec -it my_mysql ls /var

-i 选项代表互动,并且 -t 告诉Docker分配一个伪TTY设备。 的 ls 该命令将列出容器内部的所有文件和目录 /var 目录:

backups  cache	lib  local  lock  log  mail  opt  run  spool  tmp

要将shell放入容器,即进入容器内部,请通过执行shell二进制文件开始新的shell会话。 您可以使用 shbash,或图片中包含的任何其他外壳。

下面的命令将在容器内创建一个新的Bash会话:

docker container exec -it my_mysql /bin/bash

您的命令提示符将更改,表明您正在使用容器外壳。

在这里,您可以像在任何其他Linux服务器上一样运行命令。 例如,要获取当前环境变量类型的列表 env

env

输出将如下所示:

HOSTNAME=e0214d97e0fe
MYSQL_ROOT_PASSWORD=my-secret-pw
PWD=/
HOME=/root
MYSQL_MAJOR=8.0
GOSU_VERSION=1.7
MYSQL_VERSION=8.0.17-1debian9
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env

结论#

docker execdocker attach 命令允许您连接到正在运行的容器。 要将交互式外壳放置到容器中,请使用 exec 命令以启动新的Shell会话。 的 attach 命令将您的终端附加到正在运行的容器。

如有任何疑问,请在下面发表评论。

码头工人

Sidebar