Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Docker attach

실행 중인 컨테이너에 연결(attach) 한다.
docker attach [OPTIONS] CONTAINER

옵션

옵션 이름 기본 값 설명
--deatch-keys
--no-stdin false 표준입력을 연결하지 않는다.
--sig-proxy true 시그널을 프로세스에 전달한다.

설명

docker attach를 이용하면 현재 실행중인 컨테이너 ID 혹은 컨테이너 이름으로 컨테이너에 연결해서 출력을 확인하거나 표준입력을 이용해서 제어 할 수 있다.

CTRL-c 키를 입력하면 SIGKILL 시그널이 컨테이너에 전달된다. 만약 --sig-proxy가 true 라면 CTRL-c를 입력했을 때 SIGINT 가 전달된다. 또한 CTRL-p, CTRL-q 키를 이용해서 컨테이너를 유지시킨채로 detach 할 수 있다.

클라이언트가 docker attach를 이용해서 컨테이너에 연결하면, 도커는 애플리케이션 출력을 위해서 약 1MB 정도의 메모리 버퍼를 제공한다. 이 버퍼가 채워지면 API의 연결이 프로세스의 출력 속도에 영향을 미치기 시작한다. 프로세스가 느려진다는 의미다. 따라서 대량의 출력을 생성하는 프로그램에 대해서 docker attach를 실행하는 것은 좋은 생각이 아니다. 이 경우에는 docker logs 명령을 이용해서 로그에 접근해야 한다.

-it옵션 즉 표준입력과 터미널을 가진 컨테이너에 대해서 여러 클라이언트가 attach 할 경우, 이들은 터미널을 공유하게 된다. 클라이언트 입장에서는 tmux 처럼 보일 것이다.

예제

실행중인 컨테이너를 attach 하고 detach 하기
$ docker run -d --name topdemo ubuntu /usr/bin/top -b

$ docker attach topdemo

top - 02:05:52 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    373572k total,   355560k used,    18012k free,    27872k buffers
Swap:   786428k total,        0k used,   786428k free,   221740k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1 root      20   0 17200 1116  912 R    0  0.3   0:00.03 top

 top - 02:05:55 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
 Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
 Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 Mem:    373572k total,   355244k used,    18328k free,    27872k buffers
 Swap:   786428k total,        0k used,   786428k free,   221776k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
       1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top


 top - 02:05:58 up  3:06,  0 users,  load average: 0.01, 0.02, 0.05
 Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
 Cpu(s):  0.2%us,  0.3%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 Mem:    373572k total,   355780k used,    17792k free,    27880k buffers
 Swap:   786428k total,        0k used,   786428k free,   221776k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
      1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top^C
$ echo $?
0
$ docker ps -a | grep topdemo
7998ac8581f9        ubuntu:14.04    "/usr/bin/top -b"   38 seconds ago      Exited (0) 21 seconds ago                          topdemo
Ctrl-c키를 입력하면 컨테이너가 detach되면서 종료되는 걸 확인 할 수 있다.

만약 컨테이너를 detach 하더라도 계속 실행되게 하고 싶다면 sig-proxy=false로 실행하면 된다.
$ docker attach --sig-proxy=false topdemo
top - 15:59:50 up 50 min,  0 users,  load average: 0.10, 0.08, 0.18
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.3 sy,  0.0 ni, 98.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8042824 total,   737328 free,  2043860 used,  5261636 buff/cache
KiB Swap:  3998716 total,  3998716 free,        0 used.  5315808 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0   36532   2964   2604 R   0.0  0.0   0:00.01 top^C

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
40889058ee37        ubuntu              "/usr/bin/top -b"   4 minutes ago       Up 17 seconds                           topdemo
여전히 컨테이너가 실행 중인 걸 확인 할 수 있다.