`

Docker - nsenter

阅读更多
【基本介绍】
这里我们介绍docker的nsenter命令安装和使用。在大多数Linux发行版中,util-linux包中含有nsenter.
nsenter - run program with namespaces of other processes

【安装】
源码安装
$ 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


yum安装
[root@localhost tmp]# yum install util-linux
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirrors.zju.edu.cn
 * epel: ftp.riken.jp
 * extras: mirrors.163.com
 * updates: mirrors.163.com
Setting up Install Process
Package util-linux-ng-2.17.2-12.18.el6.x86_64 already installed and latest version
Nothing to do


【nsenter连接容器】
为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。

PID=$(docker inspect --format "{{ .State.Pid }}" <container>)


通过这个 PID,就可以连接到这个容器:

$ nsenter --target $PID --mount --uts --ipc --net --pid



可运行脚本
#!/bin/sh

  if [ -e $(dirname "$0")/nsenter ]; then
    # with boot2docker, nsenter is not in the PATH but it is in the same folder
    NSENTER=$(dirname "$0")/nsenter
  else
    NSENTER=nsenter
  fi

  if [ -z "$1" ]; then
    echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
    echo ""
    echo "Enters the Docker CONTAINER and executes the specified COMMAND."
    echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
  else
    PID=$(docker inspect --format "{{.State.Pid}}" "$1")
    if [ -z "$PID" ]; then
      exit 1
    fi
    shift

    OPTS="--target $PID --mount --uts --ipc --net --pid --"

    if [ -z "$1" ]; then
      # No command given.
      # Use su to clear all host environment variables except for TERM,
      # initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
      # and start a login shell.
      "$NSENTER" $OPTS su - root
    else
      # Use env to clear all host environment variables.
      "$NSENTER" $OPTS env --ignore-environment -- "$@"
    fi
  fi

运行 docker-enter <container id> ,这样就进入到指定的容器中。

更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中。
$ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
$ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc

这个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;而 docker-enter 可以进入容器或直接在容器内执行命令。
$ echo $(docker-pid <container>)
$ docker-enter <container> ls


【参考】
http://www.tuicool.com/articles/eYnUBrR
http://yeasy.gitbooks.io/docker_practice/content/container/enter.html
分享到:
评论

相关推荐

    docker-scripts, 使 Docker 更易于使用的脚本.zip

    docker-scripts, 使 Docker 更易于使用的脚本 这些是使常见 Docker...当前内容包括:a: 这是我自己的脚本变化,使用nsenter在容器中运行附加命令。 这是superceeded的Docker 执行"这个脚本执行simmilar到 Docker 提交的

    Learning.Docker.1784397938

    You will discover how to debug a container using the docker exec command and the nsenter tool. Finally, you will learn how to secure your containers with SELinux and other proven methods. Table of ...

    docker-enter:用于输入现有容器的docker工具。 该工具依赖docker和setns

    这类似于nsenter BUT,但没有所有错误和依赖项。 此外,docker-enter充分利用了docker本身,从而可以使用容器的简短ID(ID的2-3个开头字符)。 请记住,此工具需要安装docker才能运行。 但是,由于您要输入一个容器...

    docker-mazawatch:运行 mazawatch blockexplorer(带有 mazaclub 品牌)以及来自 docker-mazacoin-new 的 mazacoind 的 docker 镜像

    docker-mazawatch已弃用,请参阅 使用 mazawatch 构建一个 docker,准备在 testnet 或 livenet 模式下运行快速开始只需... You can either enter with nsenter, or ssh Run the docker with ssh available: docker run

    docker-radosgw:在 docker 中运行您自己的分布式 s3 存储

    Ceph Rados 网关在 docker 中运行您自己的分布式 s3 存储。Ceph 集群创建假设您想在一台机器上测试 ceph。 我们的 lan ip 是192.168.0.7 ,主机名是callisto 。...nsenter)并分配 3 个 osd 节点以供将来

    golang-fastcgi-nginx:Docker 上的 nginx 服务的 Golang fastcgi

    使用 Docker Compose 构建并开始一切 $(docker-machine env )docker-compose up -d访问 nginx 应用程序 curl -i http://$(docker-machine ip )/登录虚拟机 docker-machine ssh 安装 nsenter docker run --rm -v /usr...

    Docker 使用nsenter工具进入容器的操作

    在使用Docker容器的时候,利用nsenter工具会比较方便,如果我们的系统没有的话,那就需要我们自己来安装了 1.首先访问该网址找到最新版本的nsenter工具 2.然后下载nsenter工具的源码到我们的主机上 输入命令: # ...

    Docker基础-21-网络-none和host网络.rar

    然而,这同时也意味着,你需要通过其他手段(如使用nsenter或bind mounts)来与这些容器进行通信和管理。 接下来,我们讨论host网络模式。当使用`--network=host`启动容器时,容器会直接共享主机的网络堆栈,也就是...

    dockerpot:基于 docker 的蜜罐

    $ docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter 安装蜜罐脚本 将honeypot复制到/usr/bin/honeypot并将honeypot.clean复制到/usr/bin/honeypot.clean并使它们可执行。 如果你想在端口 22 上运行 SSH ...

    X11-forwarding-with-phusion-baseimage:试图让 X11 转发在 phusionbaseimage Docker 镜像中工作

    在ubuntu-nsenter文件夹中,我使用 nsenter 而不是 SSH。 在ubuntu-x11-port文件夹中,我直接用Dockerfile中的CMD命令运行程序 在phusion-nsenter文件夹中,我将 nsenter 与 phusion-baseimage 图像一起使用。

    mirrormaker-docker:用于 apache kafka mirrormaker 的 Docker

    docker-enter(使用$&gt; docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter ) 图 设置 修改KAFKA_ADVERTISED_HOST_NAME中的所有KAFKA_ADVERTISED_HOST_NAME以匹配运行fig.yml的主机的 IP 地址。 有关更多...

    coreos-packer:用于 Vagrant Box 的 CoreOS 打包器

    添加docker-enter ( nsenter docker-attach ) 脚本以轻松使用nsenter 如何建造 $ make 如何使用 $ vagrant box add coreos coreos.box $ vagrant init coreos $ vagrant up 或者 VAGRANTFILE_API_VERSION =

    Docker如何进入启动容器

    这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的attach或exec命令,以及第三方的nsenter工具等。 1、attach命令 attach命令是Docker自带的命令,命令格式为: docker attach [–detach-keys[=...

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

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

    详解挂载运行的docker容器中如何挂载文件系统

    这里推荐使用`docker-enter`脚本,它是`nsenter`的一个封装,方便与Docker容器交互。可以通过以下命令安装`nsenter`: ```bash docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter ``` 2. **找到要...

    如何给一个正在运行的Docker容器动态添加Volume

    - 要成功执行这些操作,必须具备Docker宿主机的root权限,因为nsenter命令需要在Docker宿主机上执行。 - 操作时要格外小心,避免破坏容器或宿主机上的现有文件系统结构。 - 绑定挂载时要确保不会覆盖容器中已存在的...

    tmp:tmp

    尽管您可以使用nsenter docker exec或nsenter代表容器运行命令,但有时在没有安装许多工具的容器或其主机中执行操作会很nsenter 。 这就是为什么docker-geek出现的原因。 基本思想是启动工具容器,然后 将容器或...

    docker 在容器外执行某个容器内的某个命令操作

    有时候我们想执行某个容器的某条命令,但又不想进入容器内。那该怎么办? 于是脚本可以这样写 #!/bin/bash DOCKER_ID=62f3f40ab240 ...nsenter -t 1 -m -u -n -i sh -c “echo hello world! “ (docker容器加上pr

Global site tag (gtag.js) - Google Analytics