在boot2docker上使用nsenter进行docker调试
2014-08-16 10:37
369 查看
Nsenter是一个允许进入名字空间的小工具。准确地说,当你使用doker工作时,这意味着你能够进入任何docker容器,即使它们没有运行任何sshd。在一个docker容器中运行sshd用来进行调试被认为是邪恶的。
Nsenter与Boot2docker
Docker不能直接在OS X和Windows上运行,所以你需要boot2docker。让nsenter和boot2docker一起工作着实需要一点技巧。
如果你等不及的话,这里有一个简单的函数,可以让你直接从OS X(或任何一个boot2docker的宿主系统)进入任意的docker容器:
第一行安装nsenter和docker-enter。如果没有这一句,则由第二行执行实际的调用。
一旦你声明了这个函数,你可以这样使用它:
TL;DR
如果你对这个函数的工作细节感兴趣,请继续阅读下面的内容。
在boot2docker上安装nsenter
怎么才能将nsenter装到boot2docker中呢?你需要一些技巧,因为boot2docker不是一个完整的Linux系统,它基于tiny core linux,所以对它进行编译不是一项简单地工作。
但是猜猜看我们有什么,jpetazzo已经创建了一个docker化的nsenter。它建议以如下的方式安装二进制的nsenter:
这样就可以和boot2docker一起工作了……直到你重新启动它。你应该将所有的变动存储在一个永久的/var/lib/boot2docker目录。
docker-enter脚本
docker-enter是一个帮助脚本,可以帮你完成下面两个步骤:
得到docker容器的PID
执行nsenter,选择一个程序名称进行传递,让其在名字空间中执行。如果没有特别指定的命令,一个shell将会被调用。
在前面的步骤中,安装nsenter后,要将docker-help安装在相同的目录中。
直接从OS X中运行nsenter
一些博文会建议你首先ssh进boot2docker,然后在virtual env中使用nsenter或docker-enter。但是如果你正在通过ssh执行单个命令,你可以将命令传送给boot2docker ssh <COMMAND>的最后一个参数。
用一行代码完成工作
将所有步骤整合到一个单行的函数中:
如果你想让效果是永久的,可以将上面的代码复制粘贴到~/.profile或 ~/.bash_profile,也可以将它们保存到/usr/local/bin:
Nsenter与Boot2docker
Docker不能直接在OS X和Windows上运行,所以你需要boot2docker。让nsenter和boot2docker一起工作着实需要一点技巧。
如果你等不及的话,这里有一个简单的函数,可以让你直接从OS X(或任何一个boot2docker的宿主系统)进入任意的docker容器:
docker-enter() { boot2docker ssh '[ -f /var/lib/boot2docker/nsenter ] || docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter' boot2docker ssh -t sudo /var/lib/boot2docker/docker-enter "$@" }
第一行安装nsenter和docker-enter。如果没有这一句,则由第二行执行实际的调用。
一旦你声明了这个函数,你可以这样使用它:
docker-enter <CONTAINER-ID/CONTAINER-NAME>
TL;DR
如果你对这个函数的工作细节感兴趣,请继续阅读下面的内容。
在boot2docker上安装nsenter
怎么才能将nsenter装到boot2docker中呢?你需要一些技巧,因为boot2docker不是一个完整的Linux系统,它基于tiny core linux,所以对它进行编译不是一项简单地工作。
但是猜猜看我们有什么,jpetazzo已经创建了一个docker化的nsenter。它建议以如下的方式安装二进制的nsenter:
docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
这样就可以和boot2docker一起工作了……直到你重新启动它。你应该将所有的变动存储在一个永久的/var/lib/boot2docker目录。
docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter
docker-enter脚本
docker-enter是一个帮助脚本,可以帮你完成下面两个步骤:
得到docker容器的PID
执行nsenter,选择一个程序名称进行传递,让其在名字空间中执行。如果没有特别指定的命令,一个shell将会被调用。
在前面的步骤中,安装nsenter后,要将docker-help安装在相同的目录中。
直接从OS X中运行nsenter
一些博文会建议你首先ssh进boot2docker,然后在virtual env中使用nsenter或docker-enter。但是如果你正在通过ssh执行单个命令,你可以将命令传送给boot2docker ssh <COMMAND>的最后一个参数。
用一行代码完成工作
将所有步骤整合到一个单行的函数中:
docker-enter() { boot2docker ssh -t "[ -f /var/lib/boot2docker/nsenter ] || docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter; sudo /var/lib/boot2docker/docker-enter $@"; }
如果你想让效果是永久的,可以将上面的代码复制粘贴到~/.profile或 ~/.bash_profile,也可以将它们保存到/usr/local/bin:
curl -Lo /usr/local/bin/docker-enter j.mp/docker-enter && . /usr/local/bin/docker-enter
相关文章推荐
- 【云计算】使用nsenter进入Docker容器进行调试
- docker环境下使用phpstorm进行xdebug调试代码。
- Spring Boot项目使用Eclipse进行断点调试Debug
- 如何使用 vscode 对基于 Docker 的 PHP 进行断点调试
- IDEA使用docker进行调试
- ubuntu下使用skyeye对u-boot进行源码级调试
- 使用两台计算机进行调试
- 应用WSDK -附录如何使用SOAP Trace Utility进行调试
- 使用 Eclipse 平台进行调试
- 使用虚拟机+SoftICE进行源码级驱动调试【入门】ZZ--ATU的大地
- 程序调试指南1:使用CDB和NTSD进行调试
- 使用Log4J来进行调试
- VMware实现单机使用WinDbg进行调试的方法
- gdb的简单使用和gdb+gdbserver方式进行ARM程序调试
- 使用WebLogic JMX进行定制调试
- U-Boot的移植之(四)调试篇:下载U-Boot到目标板进行调试
- 应用WSDK -附录如何使用SOAP Trace Utility进行调试
- 在VMWARE中使用KGDB进行源码级Linux内核调试
- (译)使用WinDBG进行内核调试(Fundamentals)
- 嵌入式开发中使用DDD进行调试