当一个container起来之后,我们有时候希望能进入container内部去看看,比如查查日志,执行些操作等。目前有几种方式可以实现:
1. docker attach
这个是官方提供的一种方法。
测试,首先启动一个container:
不要退出,打开另一个终端:
这样就连接进去了。这时候如果我们输入一些命令,就能看到在两个终端都有显示和输出。这种方式有比较大的局限性,如果知道了entrypoint或者有程序正在执行,通过docker attach进入之后是不能执行操作的,一个终端退出之后整个container就终止了。不推荐使用这种方式。
2. lxc-attach
如果使用这种方式,首先要保证docker是以lxc方式启动的,具体可以这样做:
修改/etc/default/docker增加DOCKER_OPTS=”-e lxc”
重启docker服务sudo service docker restart
启动container的方式和之前一样:
进入container可以这样:
这种方式还是很方便的。前提是需要重启docker服务以lxc的方式执行,进入container之后会有一个终端可以执行命令,不影响正在执行的程序。
3. nsenter
如果docker不是以lxc方式启动的,这时候还想进入一个正在执行的container的话,可以考虑使用nsenter
这个程序的安装方式很独特,使用docker进行安装:
使用方法也很简单,首先你要进入的container的PID:
然后就可以用这个命令进入container了:
为了使用方便可以写一个脚本自动完成:
这样每次要进入某个container只需要执行docker_enter
4. SSH
这个原理也很简单,在container里面启动ssh服务,然后通过ssh的方式去登陆到container里面,不推荐这种方式,主要是配置ssh登陆比较繁琐,开启ssh服务也会耗费资源,完全没有必要。
~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~
docker 1.2.0发布,带来一个比较实用的特性的是支持restart参数,可以在docker run的时候指定:
–restart=”” Restart policy to apply when a container exits (no, on-failure, always)
有这个参数就比较方便了,比如container里面的服务因为某些原因退出了,之前只能通过外部程序去重新启动container,有了这参数之后可以放container自动重启,当然也可以设置失败重试次数,通过on-failure:5这种方式来指定失败后最多尝试重启5次。
官方的两个例子:
docker run –restart=always redis
docker run –restart=on-failure:5 redis
其他新特性参考:https://blog.docker.com/2014/08/announcing-docker-1-2-0/