文档章节

几种访问Docker容器的方法

想减肥的阿文
 想减肥的阿文
发布于 2017/02/16 10:37
字数 817
阅读 31
收藏 0

原文  http://warjiang.github.io/devcat/2016/11/28/几种访问Docker容器的方法/

概述

使用docker创建了容器之后,大家比较关心的就是如何在宿主机中访问容器,进入docker容器的方法有好几种,这里就罗列下我知道的几种方式。进入docker容器的比较常见的方式如下:

  • 使用 docker attach container
  • 使用 ssh
  • 使用 nsenter
  • 使用 exec

使用docker attach方式进入容器

Docker提供了attach命令来进入容器.docker attach的help如下 

Usage:  docker attach [OPTIONS] CONTAINER

Attach to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a container
      --help                 Print usage
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process (default true)

我们首先创建一个运行在守护态的docker容器,然后使用docker attach命令进入该容器

//启动一个docker容器
docker run -itd saltstack/ubuntu-14.04 /bin/bash

使用docker ps -a查看该容器的容器id,结果如下:

这里我们可以看到该容器的id为43bdf46c62e1,这时候我们就可以执行 docker attach 43bdf46c62e1 命令来进入刚刚启动的容器,如图所示: 

但是使用docker attach命令会有一个副作用。当多个窗口使用该命令进入43bdf46c62e1r容器的时候所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他的窗口再也无法进行其他的操作。多个窗口同步显示如图所示:

使用ssh的方式进入docker容器

对于容器的使用,除了attach命令之外,比较容易想到的就是使用ssh的方式连接容器,在容器中安装ssh server,这样就能保证多人进入容器且互不干扰。关于为什么不建议使用,请参考这篇文章: Why you don’t need to run SSHd in your Docker containers 。(英文不好可以看到 中文版 ) 

使用nsenter进入Docker容器

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

安装nsenter

wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
tar -xzvf util-linux-2.24.tar.gz
cd util-linux-2.24/
./configure --without-ncurses
make nsenter
sudo cp nsenter /usr/local/bin

下面的话,我们需要使用nsenter进入容器内部。首先我们需要获取容器的PID号。这里如果通过执行 docker inspect 31ced27e1684 来获取容器的PID号为44543。然后通过改PID号,执行 nsenter --target 44543 --mount --uts --ipc --net --pid 

如下图所示:

使用exec进入容器

除了上面的做法之外,docker在1.3.x版本之后还提供了一种新的方式进入容器。这种方式相对简单 

docker exec --help

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

Run a command in a running container

  -d, --detach         Detached mode: run command in the background
  --detach-keys        Override the key sequence for detaching a container
  --help               Print usage
  -i, --interactive    Keep STDIN open even if not attached
  --privileged         Give extended privileges to the command
  -t, --tty            Allocate a pseudo-TTY
  -u, --user           Username or UID (format: <name|uid>[:<group|gid>])

接下来,我们通过 exec 来进入一个已经在运行的容器 

//查看已经在运行的容器ID
docker ps -a
//通过exec命令对指定的容器执行bash
docker exec -it 31ced27e1684 /bin/bash

如图所示:

© 著作权归作者所有

想减肥的阿文
粉丝 1
博文 18
码字总数 48127
作品 0
合肥
程序员
私信 提问
docker内springboot项目连接mysql

我的springboot项目和mysql都在docker内,位于不同的容器 如果你的java项目数据库连接地址写 localhost:3306 是连不通的,因为容器之间是不通信的 如何让docker容器之间进行通信,方式有很多...

嘴角轻扬30
06/21
27
1
进入正在运行的Docker容器的4种方式

在使用Docker创建了容器之后,如何进入该容器呢? 进入Docker容器比较常见的几种做法如下: 使用docker attach 使用SSH 使用nsenter 使用exec 一、使用docker attach进入Docker容器 Docker提供...

hiekay
2018/11/06
0
0
Docker容器进入的方式与退出

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

JungleKing
2018/06/27
1K
0
Docker容器进入的4种方式

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

Mr_zebra
2018/07/11
8
0
几种 Docker 监控工具对比

轻量级虚拟化容器 Docker,自发布以来便广受业界关注,在开源界和企业界掀起了一阵风。Docker 容器相对于 VM 有以下几个优势:启动速度快;资源利用率高;性能开销小。 从图中可以看出 Dock...

OneAPM蓝海讯通
2015/12/01
98
0

没有更多内容

加载失败,请刷新页面

加载更多

JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
9分钟前
6
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
19分钟前
3
0
正则表达式基础(一)

1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转...

清自以敬
21分钟前
3
0
idea中@Data标签getset不起作用

背景:换电脑以后在idea中有@data注解都不生效 解决办法:idea装个插件 https://blog.csdn.net/seapeak007/article/details/72911529...

栾小糖
27分钟前
3
0
Apache Kudu 不能删除不存在的数据

使用Apache Kudu客户端,对KafkaConnect Sink 进行扩展。 使用的Apache Kudu 的Java 客户端。突然有天发现作业无法提交,一直报错。 后来才发现这是Kudu自身的一种校验机制。为了忽略这种校验...

吐槽的达达仔
37分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部