不论是开发者是运维人员,都经常有需要进入容器的诉求。
目前看,主要的方法不外乎以下几种:
- 使用ssh登陆进容器
- 使用nsenter、nsinit等第三方工具
- 使用docker本身提供的工具
- 方法1需要在容器中启动ssh,存在开销和攻击面增大的问题。同时也违反了Docker所倡导的一个容器一个进程的原则。
- 方法2需要额外学习使用第三方工具。
所以大多数情况最好还是使用Docker原生方法,Docker目前主要提供了Docker exec和 Docker attach两个命令。
attach
Docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。
但是需要注意的是,如果从这个stdin中exit,会导致容器的停止。
连续ctrl+p, ctrl+q可以de-attach容器。
1 | [root@localhost temp]# docker ps |
exec
使用-it参数时,则和我们平常操作console界面类似。而且也不会像attach方式因为退出,导致整个容器退出。
如果只使用-t参数,则可以看到一个console窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况。