Docker

Docker attach 와 exec 차이점

기억보다는 기록을... 2024. 2. 5. 18:45

실행 중인 컨테이너 리스트

$ docker ps -a
CONTAINER ID   IMAGE              COMMAND              CREATED         STATUS         PORTS                                   NAMES
346a90e7f64a   httpd              "httpd-foreground"   3 minutes ago   Up 2 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   sleepy_ganguly
ba436e745dee   ubuntu:22.04       "/bin/bash"          3 hours ago     Up 3 hours                                             ubuntu

 

 

일반적인 경우 docker exec를 사용하여 컨터이너에 명령을 실행하고,

필요에 따라 docker attach를 사용하여 컨터에너에 접속하여 설정을 적용하는 경우가 많음.

 

 

attach

  • 도커에서 실행 중인 컨테이너에 터미널 접속
    • $ docker attach [컨테이너 NAME]
$ docker attach ubuntu
root@ba436e745dee:/#

 

  • 서버 콘솔 접속과 동일하게 하나의 세션만 열 수가 있어, 여러 개의 터미널을 열더라도 동일한 화면을 보여 줌.
  • 컨테이너 터미널에 종속되어, 터미널에서 나오면 컨테이너가 종료 됨 (Ctrl + P, Q로 나오면 유지 됨)
  • 컨테이너가 /bin/bash 로 실행된게 아니면 접속이 불가 (COMMAND 항목)
    • sleepy_ganguly 컨테이너를 attach 로 접속 시 접속 불가 (응답 없음) -> 명령어 강제 종료 시 컨테이너 종료 됨.
$ docker attach sleepy_ganguly


^C[Mon Feb 05 09:43:51.077226 2024] [mpm_event:notice] [pid 1:tid 140675521988480] AH00491: caught SIGTERM, shutting down

 

 

exec

  • 터미널 세션을 연결하지 않고, 새로운 명령을 실행한 결과만 확인.
    • $ docker exec [컨테이너 NAME] ls /
$ docker exec ubuntu ls /
bin
boot
dev
etc

 

  • -it 명령을 사용하여 인터랙티브(대화형) 모드를 실행 할 수있음.
    • $ docker exec -it [컨테이너 NAME] /bin/bash
$ docker exec -it sleepy_ganguly /bin/bash
root@346a90e7f64a:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules
root@346a90e7f64a:/usr/local/apache2#

 

  • 컨테이너 터미널과 독립적으로 동작하며, 터미널에서 나오더라도 컨테이너가 종료되지 않음.