Wetts's blog

Stay Hungry, Stay Foolish.

0%

Docker-命令区别-exec和attach

不论是开发者是运维人员,都经常有需要进入容器的诉求。
目前看,主要的方法不外乎以下几种:

  1. 使用ssh登陆进容器
  2. 使用nsenter、nsinit等第三方工具
  3. 使用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
2
3
4
5
6
7
8
9
[root@localhost temp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2327e7eab0ed busybox:buildroot-2014.02 "/bin/sh" About a minute ago Up About a minute bb2
[root@localhost temp]# docker attach bb2
/ # ls
bin dev etc home lib lib64 linuxrc media mnt opt proc root run sbin sys tmp usr var
/ # pwd
/
/ #

exec

使用-it参数时,则和我们平常操作console界面类似。而且也不会像attach方式因为退出,导致整个容器退出。

如果只使用-t参数,则可以看到一个console窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况。