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 : tomcat:9.0. /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
C. 然后按照下面的指令进行登陆运行的容器
nsenter --target --mount --uts --ipc --net --pid
案例如下:
[root@tkwms-web ~]# nsenter --target --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指令,最简单。
docker登录运行中的容器的4方案的更多相关文章
- Docker给运行中的容器添加映射端口
方法一: 1.获得容器IP将container_name 换成实际环境中的容器名docker inspect `container_name` | grep IPAddress 2. iptables ...
- Docker 给运行中的容器添加映射端口
方法1 1.获得容器IP 将container_name 换成实际环境中的容器名 docker inspect `container_name` | grep IPAddress 2. iptable ...
- docker 笔记--运行中的容器如何添加端口映射
解决: iptables -t nat -A DOCKER -p tcp --dport ${YOURPORT_1} -j DNAT --to-destination ${CONTAINERIP}:$ ...
- Docker学习笔记 - 在运行中的容器内启动新进程
docker psdoker top dc1 # 容器情况# 在运行中的容器内启动新进程docker exec [-d] [-i] [-t] 容器名 [command] [args]docker ex ...
- Docker查看运行中容器并进入容器
一.简述 Docker查看运行中容器并进入容器. 二.方法 $ sudo docker ps $ sudo docker exec -it 775c7c9ee1e1 /bin/bash 将黄色文字替换 ...
- Docker使用exec进入正在运行中的容器
docker在1.3.X版本之后提供了一个新的命令exec用于进入容器,这种方式相对简单一些,下面我们来看一下该命令的使用: docker exec --help 接下来我们使用该命令进入一个已经在运 ...
- Docker学习笔记之运行和管理容器
0x00 概述 容器是基于容器技术所建立和运行的轻量级应用运行环境,它是 Docker 封装和管理应用程序或微服务的“集装箱”.在 Docker 中,容器算是最核心的部分了,掌握容器的操作也是 Doc ...
- docker 给运行的容器映射本地端口
1.提交运行中的容器为一个镜像 (这样不会丢失在容器的各种操作) docker commit tang tang1 ### tang(运行容器名称) tang1(生成镜像名称) 2 ...
- docker实战系列之快速删除docker中的容器
1.停用全部运行中的容器 docker stop $(docker ps -q) 2.删除全部容器 docker rm $(docker ps -aq) 3.停用并删除容器 docker stop $ ...
随机推荐
- Rails-Treasure chest2 嵌套表单;
嵌套表单1-1 嵌套表单1-多 选日期时间的UI (一个jquery Plugin) 拆除前后台css和js Rich Editor, 显示输入的HTML tag 批次编辑/删除 嵌套表单1-1 核心 ...
- Highcharts 时间格式化函数
1.函数构造: Highcharts.dateFormat(String format, [Number time], [Boolean capitalize]) 2.参数列表: Strin ...
- mybatis的jdbcType和javaType、oracle,MySQL的对应类型
JdbcType介绍 数据库列字段都是有类型的,不同的数据库有不同的类型.为了表示这些数据类型,Java源码是采用枚举来定义的: public enum JDBCType implements SQL ...
- NopCommerce 更改发票字体
NopCommerce 默认是用~/App_Data/Pdf/FreeSerif.ttf 这个字体的. 用这个字体,发票里的中文不能显示. 可以把c:\windows\font\simhei.ttf ...
- JS--reload 重新加载 true参数
location.reload() 作用是用来重新加载当前显示的页面. 如果调用reload()时不传递参数,页面就会以最有效的方式重新加载. 也就是说,如果页面自上次请求以来并没有改变过,页面就会从 ...
- 在react/redux中使用Immutable
在redux中使用Immutable 1.什么是Immutable? Immutable是一旦创建,就不能被更改的数据. 对Immutable对象的任何修改或添加删除操作都会返回一个新的Immutab ...
- Android 音视频深入 九 FFmpeg解码视频生成yuv文件(附源码下载)
项目地址,求star https://github.com/979451341/Audio-and-video-learning-materials/tree/master/FFmpeg(MP4%E8 ...
- python中字符串方法总结
定义一个空字符串: a=' '; s.strip() #去空格 s.upper()#全部转换成大写: s.lower()# 全部转换成小写: s.isdigit()#判断字符串是否只有数字组成:返回t ...
- tensorboard使用方法
http://blog.csdn.net/u010099080/article/details/77426577
- 2D过渡模块的其他属性
官网上关于过渡属性的值: 属性 描述 CSS transition 简写属性,用于在一个属性中设置四个过渡属性. 3 transition-property 规定应用过渡的 CSS 属性的名称. 3 ...