【基本介绍】
这里我们介绍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 更易于使用的脚本 这些是使常见 Docker...当前内容包括:a: 这是我自己的脚本变化,使用nsenter在容器中运行附加命令。 这是superceeded的Docker 执行"这个脚本执行simmilar到 Docker 提交的
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 BUT,但没有所有错误和依赖项。 此外,docker-enter充分利用了docker本身,从而可以使用容器的简短ID(ID的2-3个开头字符)。 请记住,此工具需要安装docker才能运行。 但是,由于您要输入一个容器...
docker-mazawatch已弃用,请参阅 使用 mazawatch 构建一个 docker,准备在 testnet 或 livenet 模式下运行快速开始只需... You can either enter with nsenter, or ssh Run the docker with ssh available: docker run
Ceph Rados 网关在 docker 中运行您自己的分布式 s3 存储。Ceph 集群创建假设您想在一台机器上测试 ceph。 我们的 lan ip 是192.168.0.7 ,主机名是callisto 。...nsenter)并分配 3 个 osd 节点以供将来
使用 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工具会比较方便,如果我们的系统没有的话,那就需要我们自己来安装了 1.首先访问该网址找到最新版本的nsenter工具 2.然后下载nsenter工具的源码到我们的主机上 输入命令: # ...
然而,这同时也意味着,你需要通过其他手段(如使用nsenter或bind mounts)来与这些容器进行通信和管理。 接下来,我们讨论host网络模式。当使用`--network=host`启动容器时,容器会直接共享主机的网络堆栈,也就是...
$ docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter 安装蜜罐脚本 将honeypot复制到/usr/bin/honeypot并将honeypot.clean复制到/usr/bin/honeypot.clean并使它们可执行。 如果你想在端口 22 上运行 SSH ...
在ubuntu-nsenter文件夹中,我使用 nsenter 而不是 SSH。 在ubuntu-x11-port文件夹中,我直接用Dockerfile中的CMD命令运行程序 在phusion-nsenter文件夹中,我将 nsenter 与 phusion-baseimage 图像一起使用。
docker-enter(使用$> docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter ) 图 设置 修改KAFKA_ADVERTISED_HOST_NAME中的所有KAFKA_ADVERTISED_HOST_NAME以匹配运行fig.yml的主机的 IP 地址。 有关更多...
添加docker-enter ( nsenter docker-attach ) 脚本以轻松使用nsenter 如何建造 $ make 如何使用 $ vagrant box add coreos coreos.box $ vagrant init coreos $ vagrant up 或者 VAGRANTFILE_API_VERSION =
Docker 容器的四种进入方式分别是:使用 docker attach 进入 Docker 容器、使用 SSH 进入 Docker 容器、使用 nsenter 进入 Docker 容器和使用 docker exec 进入 Docker 容器。 nsenter 是一个非常有用的工具,可以让...
这里推荐使用`docker-enter`脚本,它是`nsenter`的一个封装,方便与Docker容器交互。可以通过以下命令安装`nsenter`: ```bash docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter ``` 2. **找到要...
- 要成功执行这些操作,必须具备Docker宿主机的root权限,因为nsenter命令需要在Docker宿主机上执行。 - 操作时要格外小心,避免破坏容器或宿主机上的现有文件系统结构。 - 绑定挂载时要确保不会覆盖容器中已存在的...
尽管您可以使用nsenter docker exec或nsenter代表容器运行命令,但有时在没有安装许多工具的容器或其主机中执行操作会很nsenter 。 这就是为什么docker-geek出现的原因。 基本思想是启动工具容器,然后 将容器或...
有时候我们想执行某个容器的某条命令,但又不想进入容器内。那该怎么办? 于是脚本可以这样写 #!/bin/bash DOCKER_ID=62f3f40ab240 ...nsenter -t 1 -m -u -n -i sh -c “echo hello world! “ (docker容器加上pr