如何进入 docker 重新进入容器容器

ssh登录docker容器
1、启动一个docker容器
# docker run -t -i ubuntu/ruby:v1 /bin/bash
2、然后在容器里,安装openssh-server openssh-client
# apt-get install openssh-server openssh-client
3、完成之后,修改root密码
4、退出容器,并保存以上修改
# docker commit 3ea7a99a0025 ubuntu/ruby:v2
5、停止,并删除刚才的容器
# docker stop
[container-id]&&
# docker rm [container-id]
查看容器id
# docker ps -a
查看镜像列表
# docker images
6、用刚保存的镜像,后台启动一个新的容器
&docker run --name [image-name] -i -t -p 50001:22
[image-id]
例: # docker run -d -p 50001:22 ubuntu/ruby:v2 /usr/sbin/sshd
7、ssh远程登录该容器
# ssh root@localhost -p 50001
如果想要通过ssh密钥登录,则在第2步,修改 /etc/ssh/sshd_config 文件,将RSAAuthentication
和&PubkeyAuthentication 后面的值都改成yes ,保存。
将本地.ssh下的id_rsa.pub上传到容器中的 id_rsa.pub,并 # mv
/root/.ssh/id_rsa.pub /root/.ssh/authorized_keys,然后
chmod 600 /root/.ssh/authorized_keys 即可.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何进入Docker容器
查看: 10119|
评论: 0|原作者: 几点人|来自: oschina
摘要: 在前几篇文章里,Lukas Pustina简单地介绍了使用Docker进行系统级虚拟化。在这篇文章里,我将讨论四种连接Docker容器并与其进行交互的方法。例子中所有的代码都可以在GitHub中找到,你可以亲自对它们进行测试。 ...
  在前几篇文章[,,]里,简单地介绍了使用Docker进行系统级虚拟化。在这篇文章里,我将讨论四种连接Docker容器并与其进行交互的方法。例子中所有的代码都可以在中找到,你可以亲自对它们进行测试。nsenter  从util-linux版本2.23开始,nsenter工具就包含在其中。它用来访问另一个进程的名字空间。nsenter要正常工作需要有root权限。很不幸,Ubuntu 14.4仍然使用的是util-linux版本2.20。安装最新版本的util-linux(2.24)版,请按照以下步骤:12cd&/tmpcurl&https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz&|&tar&-zxf-cd&util-linux-2.24./configure&--without-ncursesmake&nsentercp&nsenter&/usr/local/bin  为了连接到容器,你还需要找到容器的第一个进程的PID。1docker&inspect&--format&"{{&.State.Pid&}}"&&container-id&  通过这个PID,你就可以连接到这个容器:1nsenter&--target&$PID&--mount&--uts&--ipc&--net&--pidnsinit  从0.9版本开始,Docker自身就具有一个管理容器的库,名字为&。libcontainer中的nsinit工具允许用户直接访问linux名字空间和cgroup内核。在安装nsinit之前,你首先需要安装Go运行时环境:&1234apt-get&install&git&golang-go&mkdir&-p&$HOME/go-dev/binmkdir&-p&$HOME/go-dev/src&echo&"export&GOPATH=\$HOME/go-dev"&&&&~/.profileecho&"PATH=\$PATH:\$GOPATH/bin"&&&&~/.profile&source&~/.profile  接下来才安装nsinit:123mkdir&-p&$GOPATH/src/github.com/dotcloudcd&$GOPATH/src/github.com/dotcloud&git&clone&https://github.com/dotcloud/docker.gitcd&$GOPATH/src/github.com/dotcloud/docker&/usr/bin/go&get&-v&/dotcloud/docker/vendor/src/github.com/docker/libcontainer/nsinit  nsinit读取的是位于/var/lib/docer/execdriver/native/&container-id&容器目录下的配置数据。要运行nsinit,你需要切换到容器目录下。由于/var/lib/docker目录对于root用户是只读权限,因此你还需要root权限。通过docker的ps命令,你可以确定容器ID。一旦你进入/var/lib/docker目录,你就可以连接容器了:1nsinit&exec&/bin/bashlxc(-attach)  直到Docker 0.8.1版本为止,LXC一直是管理容器的基本工具,Docker一直支持这个工具。但是从0.9.0版本开始,Docker默认使用libcontainer管理容器,不再依赖LXC了。因此默认情况下,你不能使用lxc-attach了。  如果你仍然希望使用lxc-attach,那么你需要使用-e lxc选项来重新启动Docker服务进程。使用这个选项,Docker的内部将再次使用LXC管理容器了。完成这个任务最简单的做法就是创建/etc/default/docker文件(如果这个文件仍然不存在),并添加以下内容:DOCKER_OPTS=" -e lxc"  现在你可以重新启动Docker服务了。要连接容器,你需要知道完整的容器ID:1docker&ps&--no-trunc  接下来,你就可以连接这个容器了。要完成下面工作,你还需要root权限:1lxc-attach&-n&&container-id&&--&/bin/bashsshd  上面所有三种方法都要求具有主机系统的root权限。为了不采用root权限,通过ssh访问容器将是一个很好的选择。  要做到这一点,你需要构建一个支持SSH服务的基础映像。此时,我们可能遇到这样的问题:我们是不是用Docker CMD或者ENTRYPOINT运行一条命令就可以了?如果此时有sshd进程运行,那么我们就不要再运行其他进程了。接下来的工作是创建一个脚本或者使用像supervisord这样的进程管理工具来启动其它所有需要启动的进程。有关如何使用supervisord的&可以在Docker的web站点上找到。一旦你启动了具有sshd进程的容器,你就可以像以往一样通过ssh客户端了连接这个容器了。结论  sshd方法可能是最简单的连接容器的方法,而且大多数用户习惯通过ssh连接虚拟机。另外,连接容器时你也不需要一定使用root权限。不过,对于是否一个容器是否应当管理不止一个进程仍然存在许多争议。这种方法最终使得每个容器了多了一个sshd进程,这从根本上来说不是进程虚拟化的所提倡的。  另外三种方法都需要root权限。到0.8.1版本为止,Docker都是使用LXC来管理容器的。正是由于这个原因,使用lxc-attach连接容器就非常容易。不过从版本0.9.0开始Docker服务就必须使用 -e lxc选项启动才能在内部支持LXC管理容器。不过,由于设置了这个选项,Docker将再次依赖LXC,而LXC可能随着发布或者安装的不同可能被剔除。  nsenter和nsinit总的来说是相同的。这两个工具的主要区别是nsinit在本身的容器了建立了一个新的进程,而nsenter只是访问了名字空间。Jerome Petazzoni在里对这一点说的很透彻。
上一篇:下一篇:
快毕业了,没工作经验,
找份工作好难啊?
赶紧去人才芯片公司磨练吧!!}

我要回帖

更多关于 docker 怎么进入容器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信