docker登录运行中的容器的4方案

目前容器云非常的成熟,也有很多的使用案例,可以说不是什么高大上的东西了,可以说整个云计算也不是什么奢侈品,而是基础设施。但是如何使用,就成了必须的技术。

今天记录下,基于docker的容器登录技术。

通常情况下,我们想看看运行中的docker容器的状态,尤其是想看看容器内部的应用配置,比如tomcat的配置信息,该怎么操作呢?当然了,你会说,直接docker inspect containerId,找到workdir,或者配置文件路径,然后docker cp从容器中拷贝到宿主机上。这些都是处理静态问题的办法,但是能否直接登录到容器上呢?

答案是有的,比较docker容器如此优秀出色。

准备工作,先启动一个docker容器,在后台运行,方便讲解后面的操作方法。

1.查看当前有些什么镜像。

2. 然后启动一个

以后台的方式启动tomcat:9.0.2,容器主机名login,将宿主机的9999端口映射到容器的8080上,容器的名称logindocker。

[root@tkwms-web wmsuser]# docker run -it --name logindocker -h login -p 9999:8080 tomcat:9.0.2 /bin/bash

3.查看启动后的容器信息

有好几种办法,可以直接连接上运行中的docker容器。下面就说常用的4种吧:

1. docker attach <ContainerID>

A. 登录后,就直接看到类似登录主机的感觉。然后,做什么操作,都可以进行了。另外,这里有一个问题需要注意,那就是如何退出docker attach连上的容器呢?是不是个问题?直接ctrl+c,肯定是不行的,因为有可能会导致容器挂掉, exit呢?也是会导致容器死掉的。有办法吗?答案是有的。直接在登录上的容器命令行下输入ctrl+p+q,就可以安全退出了。


B. 存在的问题:多人同时attach到同一个容器的时候,大家看到的是相同的内容,其中一个人卡顿,其他人都卡住,也就是相当于是一个人操作(有一个好处哟,就是不同地方的工作协调时,一个人操作,另外一个人可以看到对方在操作啥,就和看直播似的),此模式用于测试环境可以,生产环境不建议使用。

2. docker exec 

该命令的帮助文档:

[root@tkwms-web wmsuser]# docker exec --help

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a container
  -e, --env list             Set environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
  -w, --workdir string       Working directory inside the container

下面看一个案例:

[root@tkwms-web wmsuser]# docker exec -it 8c9dc1aaccad /bin/bash

A. 退出指令可以是exit,也可以是ctrl+p+q
B. 效果和docker attach类似。但是不存在docker attach的安全问题。

3. ssh方式

这里需要说明的是,运行的容器里面要有sshd服务,只有这样,才可以在远程的ssh客户端能够登陆上去。和普通的ssh使用方式一样。

4. nsenter命令方式

A. 这个nsenter是第三方的应用,需要自己下载安装。 wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz。 如何安装,就不说了,解压后自己一看就知道。

B. 获取要登陆的容器的主进程PID   docker inspect -f {{.State.PID}} containerID

[root@tkwms-web util-linux-2.24]# docker inspect -f {{.State.Pid}} 886f31e4d385
    11625

C. 然后按照下面的指令进行登陆运行的容器

nsenter --target 11625 --mount --uts --ipc --net --pid

案例如下: 

[root@tkwms-web ~]# nsenter --target 11625 --mount --uts --ipc --net --pid
mesg: ttyname failed: No such file or directory
root@login:/# ls
bin  boot  dev  docker-java-home  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@login:/#

综上所述,建议使用docker exec指令,最简单。

原文地址:https://www.cnblogs.com/shihuc/p/9967267.html