订阅本站
收藏本站
微博分享
QQ空间分享

连接到Docker容器,包括将Shell带到容器的方法

lilin 分类:教程 时间:2019/11/29 00:25:07 评论: 加入收藏

在本文中,我们将说明如何连接到容器的主要运行过程以及如何将shell安装到正在运行的容器。

连接到Docker容器,包括将<a href=http://8u.hn.cn/linux/Shelljiaocheng/ target=_blank class=infotextkey>shell</a>带到容器的方法

 

前言

当您想查看容器内部正在发生什么时,连接到正在运行的Docker容器会很有帮助,如果Docker容器无法按预期工作,则可以将其连接到该容器或将shell获取到该容器,然后运行诸如ps或top之类的命令,您还可以输入容器,安装软件包,并从中构建新的Docker映像。参考杀掉Linux中进程的使用示例:使用ps,kill,killall,pkill,top命令

 

连接到容器

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

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

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

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

-p 8080:80选项使Docker将容器的8080端口绑定到主机上的80端口。

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

$ docker container ls

连接到Docker容器,包括将<a href=http://8u.hn.cn/linux/Shelljiaocheng/ target=_blank class=infotextkey>shell</a>带到容器的方法

使用容器的ID或名称连接到容器:

$ docker container attach my_nginx

运行容器时执行的nginx image的默认命令设置为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停止容器。

 

shell带到容器

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

要查看exec命令的工作方式以及如何使用它进入容器shell,请首先启动一个新容器,我们将使用官方的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会话,您可以使用sh、bash或映像中包含的任何其他shell

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

$ docker container exec -it my_mysql /bin/bash

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

在这里,您可以像在任何其他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 exec和docker attach命令可以连接到正在运行的容器,要将交互式shell放入容器,请使用exec命令启动新的shell会话,attach命令将您的终端连接到正在运行的容器。

 

TAG:

文章评论

留言与评论(共有 0 条评论)
   
验证码: