"꾸준하고 완벽한 한 걸음"

Dev/Docker

[Docker] 컨테이너 entrypoint가 bash쉘 일 때 attach, exec 사용 시 exit의 영향

kimyoungrok 2025. 4. 9. 16:46
728x90

목차

  • Docker 컨테이너의 ENTRYPOINT가 /bin/bash 일 때
  • docker attach로 진입한 후 exit 명령어 실행
  • docker exec로 진입한 후 exit 명령어 실행
  • attach, exec 비교 정리

서론

Docker 컨테이너 내부에 접속할 때 docker attach와 docker exec 두 명령어를 사용할 수 있습니다.

이 글에서는 도커 컨테이너의 entrypoint가 bash쉘(/bin/bash)일 때, attach와 exec 명령을 사용해 내부에 진입 후 exit 명령어를 실행했을 때 컨테이너 상태가 어떻게 변하는지 살펴보겠습니다.


Docker 컨테이너의 ENTRYPOINT가 /bin/bash 일 때

컨테이너의 ENTRYPOINT가 /bin/bash 라는 것은, 컨테이너가 실행될 때 기본적으로 bash 쉘이 실행되고, 쉘 세션이 메인 프로세스로 동작함을 의미합니다.

이를 확인해 보기 위해 ubuntu 컨테이너를 생성 및 실행하고, 상태를 확인해보겠습니다.

docker run -dit --name myubuntu ubuntu:20.04
docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED                  STATUS                  PORTS   NAMES
0246aa4d1448   ubuntu:20.04   "/bin/bash"   Less than a second ago   Up Less than a second           myubuntu

bash쉘은 실행 중인 myubuntu 컨테이너의 PID 1번 메인 프로세스로 동작합니다.

root@5cdae46966de:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 06:43 pts/0    00:00:00 /bin/bash
root         9     1  0 07:03 pts/0    00:00:00 ps -ef

docker attach로 진입한 후 exit 명령어 실행

이 방식으로 컨테이너에 접근하면, 컨테이너의 기본 프로세스 (이 경우 /bin/bash)에 직접 접근하게 됩니다.

docker attach myubuntu

여기서 exit 명령어를 입력하면 어떻게 될까요?

root@5cdae46966de:/# exit

init 시스템인 PID 1 프로세스 /bin/bash가 종료됨에 따라 컨테이너 자체가 중지됩니다.

따라서 ctrl + P, Q를 입력해 쉘을 종료하지 않고 컨테이너를 빠져나와야 합니다.


docker exec로 진입한 후 exit 명령어 실행

이번엔 새로운 터미널을 사용하여 컨테이너에 접근해 보겠습니다.

docker exec -it myubuntu /bin/bash

exec 명령어로 접근 시 메인 프로세스로 실행 중인 쉘에 접근하는게 아닌, 별도의 새 프로세스로 쉘을 생성하고 접근합니다.

root@5cdae46966de:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 07:15 pts/0    00:00:00 /bin/bash
root        10     0  1 07:18 pts/1    00:00:00 /bin/bash
root        19    10  0 07:18 pts/1    00:00:00 ps -ef

컨테이너 내부를 확인해 보면 bash 프로세스가 PID 1 외에 추가로 생긴 것을 확인할 수 있습니다.

이제 exit 명령어를 입력하면 exec로 실행된 쉘 프로세스만 종료됩니다. 컨테이너의 PID 1인 메인 프로세스는 종료되지 않았으므로 컨테이너는 계속 동작합니다.


attach, exec 비교 정리

명령어 프로세스 종료 여부 컨테이너 상태 변경 여부

docker attach PID 1 종료 중지
docker exec 새로 생성한 PID 종료 동작

따라서 컨테이너를 유지하면서 작업하고 싶다면 docker exec를 사용하는 것을 권장합니다.

728x90