`
m635674608
  • 浏览: 5042113 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

如何进入Docker容器

 
阅读更多

概述

在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法。

进入Docker容器比较常见的几种做法如下:

  • 使用docker attach
  • 使用SSH
  • 使用nsenter
  • 使用exec

下面我们来逐一讲一下每种方式。

一、使用docker attach进入Docker容器

Docker提供了attach命令来进入Docker容器。

接下来我们创建一个守护态的Docker容器,然后使用docker attach命令进入该容器。

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ sudo docker run -itd ubuntu:14.04 /bin/bash  

然后我们使用docker ps查看到该容器信息,接下来就使用docker attach进入该容器

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ sudo docker attach 44fc0f0582d9  


可以看到我们已经进入到该容器中了。

但在,使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。下来我们来演示一下。打开两个窗口,都使用attach命令进入同一个容器里面。如下所示:

接下来我们只在第一个窗口进行操作,可以看到第一个窗口的操作同步到第二个窗口显示了,如下:

因为这个原因,所以docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。

二、使用SSH进入Docker容器

在生产环境中排除了使用docker attach命令进入容器之后,相信大家第一个想到的就是ssh。在镜像(或容器)中安装SSH Server,这样就能保证多人进入容器且相互之间不受干扰了,相信大家在当前的生产环境中(没有使用Docker的情况)也是这样做的。但是使用了Docker容器之后不建议使用ssh进入到Docker容器内。关于为什么不建议使用,请参考如下几篇文章:

Why you don't need to run SSHd in your Docker containers

上面这篇文章是英文的,如果英语不好的话可以参考如下译文

为什么不需要在 Docker 容器中运行 sshd

三、使用nsenter进入Docker容器

在上面两种方式都不适合的情况下,还有一种比较方便的方法,即使用nsenter进入Docker容器。关于什么是nsenter请参考如下文章:

https://github.com/jpetazzo/nsenter

在了解了什么是nsenter之后,我们需要把nsenter安装到主机中(注意是主机而非容器或镜像),具体的安装命令如下:

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
  2. $ tar -xzvf util-linux-2.24.tar.gz  
  3. $ cd util-linux-2.24/  
  4. $ ./configure --without-ncurses  
  5. $ make nsenter  
  6. $ sudo cp nsenter /usr/local/bin  

安装好nsenter之后可以查看一下该命令的使用。

nsenter可以访问另一个进程的名称空间。所以为了连接到某个容器我们还需要获取该容器的第一个进程的PID。可以使用docker inspect命令来拿到该PID。

docker inspect命令使用如下:

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ sudo docker inspect --help  

inspect命令可以分层级显示一个镜像或容器的信息。比如我们当前有一个正在运行的容器

可以使用docker inspect来查看该容器的详细信息。

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ sudo docker inspect 44fc0f0582d9  


由其该信息非常多,此处只截取了其中一部分进行展示。如果要显示该容器第一个进行的PID可以使用如下方式

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9  

在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了。

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ sudo nsenter --target 3326 --mount --uts --ipc --net --pid  

其中的3326即刚才拿到的进程的PID

当然,如果你认为每次都输入那么多参数太麻烦的话,网上也有许多做好的脚本供大家使用。

地址如下:

http://yeasy.gitbooks.io/docker_practice/content/container/enter.html

http://www.tuicool.com/articles/eYnUBrR

 

四、使用docker exec进入Docker容器

除了上面几种做法之外,docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用:

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ sudo docker exec --help  

接下来我们使用该命令进入一个已经在运行的容器

[plain] view plain copy在CODE上查看代码片派生到我的代码片
  1. $ sudo docker ps  
  2. $ sudo docker exec -it 775c7c9ee1e1 /bin/bash  

网上还有一种做法是使用nsinit,没有亲身实践过所以不在此罗列了,有兴趣的话可以尝试一下。

好了,关于如何进入Docker容器就暂告一段落,如有错误之处请大家指正,谢谢!

 

http://blog.csdn.net/u010397369/article/details/41045251

分享到:
评论

相关推荐

    Docker如何进入启动容器

    本文介绍了Docker如何进入启动容器,分享给大家,具体如下: 在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。 这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的...

    Docker容器中文乱码(修改docker容器编码格式)的解决方案

    kubectl exec进入到docker容器中进行查看时发现,文件在容器中也是中文文件名显示异常。查看docker容器编码格式:执行locale命令;可以看到当前编码格式为POSIX,而这种编码格式不支持中文  解决办法:locale -a查

    docker容器里安装ssh的具体步骤

    2.启动并进入bash docker run -it -d ubuntu:lastest /bin/bash # 查看刚刚运行容器的id docker ps # 在容器中执行bash命令 docker exec -it id /bin/bash 3.安装openssh-server并启动 apt-get update apt-get ...

    Docker圣经:大白话说Docker底层原理,6W字实现Docker自由.docx

    Docker 容器的四种进入方式分别是:使用 docker attach 进入 Docker 容器、使用 SSH 进入 Docker 容器、使用 nsenter 进入 Docker 容器和使用 docker exec 进入 Docker 容器。 nsenter 是一个非常有用的工具,可以让...

    探索Docker容器的交互:进入运行中容器的多种方法

    本文将详细介绍如何进入运行中的Docker容器,并探讨不同的方法及其适用场景。 Docker容器技术为应用的快速部署、隔离和移植提供了一种轻量级和高效的解决方案。在开发和运维过程中,有时需要进入运行中的容器进行...

    docker容器技术文档

    Docker 容器技术文档 ...* `docker exec -it CONTAINER ID /bin/bash`:进入容器。 * `exit`:退出容器。 Docker 容器技术提供了一种轻量级的操作系统虚拟化解决方案,能够在隔离的环境中运行多个应用程序。

    控制docker容器日志大小的方法V1.2.docx

    ### 控制Docker容器日志大小的方法 #### 概述 在Docker环境中,容器的日志文件如果未能得到有效的管理,很容易导致宿主机磁盘空间被迅速占用,从而影响整个系统的稳定性和性能。本文将详细介绍如何针对新创建的...

    docker容器

    Docker容器与容器云(第2版)根据Docker 1.10版和Kubernetes 1.2版对第1版进行了全面更新,从实践者的角度出发,以Docker和Kubernetes为重点,沿着“基本用法介绍”到“核心原理解读”到“高级实践技巧”的思路,一本...

    详解Docker退出容器不关闭容器的方法

    进入docker容器后如果退出容器,容器就会变成Exited的状态,那么如何退出容器让容器不关闭呢? 如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器,这一点很重要,请牢记! 以下示例为退出容器但不关闭容器 ...

    基于微服务和Docker容器技术的PaaS云平台架构设计.docx

    ### 基于微服务和Docker容器技术的PaaS云平台架构设计 #### 微服务架构概述 本文档旨在探讨一种高效的云平台建设方法,该方法基于微服务架构和Docker容器技术,旨在为开发团队提供一套完整的服务快速开发、部署、...

    Docker容器技术-容器的进入与退出.pptx

    Docker容器技术

    掌握Docker容器管理:优雅地停止和删除的艺术

    - **运行**: 容器启动后即进入运行状态。 - **停止**: 使用适当的命令安全地停止容器,以避免数据丢失或服务中断。 - **删除**: 清理不再需要的容器,释放资源。 #### 如何停止 Docker 容器 1. **优雅停止**: - ...

    Docker容器修改配置文件的实现

    Docker容器修改配置文件的实现涉及的关键知识点可以从以下方面进行详细阐述: 1. Docker容器的基本概念:Docker是一种开源的容器化平台,它允许开发者打包应用及其依赖包到一个可移植的容器中,然后在任何支持...

    enter-docker-fzf:Fish脚本进入Docker容器

    标题中的"enter-docker-fzf"是一个专门为Fish shell(一种友好、交互式的命令行环境)设计的脚本,用于方便用户快速进入正在运行的Docker容器。这个工具结合了`fzf`(一个用于命令行的快速选择工具)的功能,让用户...

    Docker容器&镜像使用

    使用 `docker attach` 或 `docker exec` 命令可以进入容器。例如,要进入名称为 `cent` 的容器,可以使用以下命令: ``` docker attach cent ``` 或 ``` docker exec -it cent /bin/bash ``` 导出容器 使用 `docker...

    Docker容器应用日志查看方法

    本文将详细介绍Docker容器应用日志查看的常用方法。 首先,要查看Docker容器的日志,最常用的方式是使用`docker logs`命令。这个命令可以帮助用户获取容器的日志输出,非常适合诊断容器中运行的应用程序问题。使用...

    详解如何获取docker容器(container)的ip地址

    1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container> 或 docker inspect 或 docker ...

    Docker容器详解.docx

    Docker容器详解 1 1. 介绍 1 1.1. 什么是Docker? 1 1.2. 为什么需要Docker? 1 1.3. Docker可以干嘛? 1 1.4. 什么是Dockfile? 1 1.5. 什么是Docker Compose? 5 2. 环境搭建 8 2.1. Docker环境准备 8 ...

    Docker从零走向实战视频(上).zip

    目录: 1-1 虚拟化技术发展史 1-2 虚拟化技术是什么 ...2-11 Docker使用初体验-进入Docker容器内部 2-12 Docker使用初体验-补充说明 3-1 Docker的体系架构(1) 3-2 Docker的体系架构(2)r ..........

Global site tag (gtag.js) - Google Analytics