`

使用nsenter进入docker container

 
阅读更多
先计算容器的PID:

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
solumuser@ubuntu14044:~/devstack$ docker ps
CONTAINER ID        IMAGE                                                                                                         COMMAND                CREATED             STATUS              PORTS               NAMES
e6551c6bf7e7        98b7ac1054f74e97840618198d699cec-java_app-20160517t175809236072150-1713a757d34ca340211473f322e0fc2406d3f65d   "/bin/bash -c 'sourc   16 hours ago        Up 16 hours                             nova-148a593f-d75c-4ac8-8cad-95c2ee7ffefd   
solumuser@ubuntu14044:~/devstack$ PID=$(docker inspect --format {{.State.Pid}} nova-148a593f-d75c-4ac8-8cad-95c2ee7ffefd )

进入容器:

nsenter --target $PID --mount --uts --ipc --net --pid
solumuser@ubuntu14044:~/devstack$ sudo nsenter --target $PID --mount --uts --ipc --net --pid
root@instance-0000000e:/# pwd
/
root@instance-0000000e:/# ls
app  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  solum  srv  sys  tmp  usr  var





#!/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

 

分享到:
评论

相关推荐

    dssh:使用 nsenter 为 Docker 容器提供终端。 外观和感觉就像一个 ssh 客户端

    dssh 使用 nsenter 为 Docker 容器提供终端。 外观和感觉就像一个 ssh 客户端。安装gem install dssh用法假设你有一个 docker 容器已经启动并且正在运行: dssh &lt; container&gt; 如果您只运行一个容器,则可以不使用...

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

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

    Docker如何进入启动容器

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

    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 ...

    恩森特

    也就是说,nsenter不进入cgroup,因此规避了资源限制。 这样做的潜在好处是调试和外部审核,但是对于远程访问, docker exec是当前推荐的方法。 重要提示:此存储库在Docker早期非常有用,因为当时主要发行nsenter...

    Docker系统容器架构介绍.pptx

    动态添加设备可以使用Nsenter – mknod 命令,或者使用docker update –add/del-device 命令。 十一、动态挂卷 动态挂卷可以使用Find filesystem、Find the device、Nsenter – mknod – mount to tmp – bind ...

    Vagrant_CoreOS_Docker:用于设置 vagrant 的环境,该环境使用 docker 映像上的标准 nginx 服务器启动 CoreOS 映像

    要进入容器,请运行: ./enter.sh &lt;container&gt;或vagrant ssh -- sudo share/nsenter.sh &lt;container&gt; 错误默认:警告:远程连接断开。 正在重试...正在被垃圾邮件发送 对此有几种可能的解决方案。 通过打开文件

Global site tag (gtag.js) - Google Analytics