Skip to content

docker exec와 docker attach 차이 ​

이미 실행 중인 컨테이너 안을 들여다보는 방법에는 exec와 attach 두 가지가 있는데, 둘은 비슷해 보여도 동작 방식이 완전히 다릅니다.

exec: 새 프로세스를 하나 더 띄운다 ​

docker exec는 이미 돌아가고 있는 컨테이너 안에 새로운 프로세스를 하나 더 실행하는 방식입니다. 사무실에 이미 사람들이 일하고 있는데, 내가 새 문으로 따로 들어가는 느낌입니다.

docker exec -it <컨테이너명> /bin/bash

이렇게 열어둔 터미널에서 exit을 쳐도 내가 만든 프로세스만 종료될 뿐, 컨테이너 자체와 원래 돌아가던 메인 프로세스는 아무 영향을 받지 않습니다.

attach: 원래 있던 프로세스에 직접 연결한다 ​

docker attach는 컨테이너가 시작될 때 실행된 **메인 프로세스(PID 1)**의 입출력에 지금 내 터미널을 직접 연결하는 방식입니다. 그래서 메인 프로세스가 실시간으로 찍는 로그를 그대로 볼 수 있습니다.

문제는 여기서 exit을 치면 메인 프로세스 자체가 종료돼버려서, 컨테이너까지 같이 꺼져버린다는 점입니다. 컨테이너를 끄지 않고 빠져나오려면 Ctrl+P 다음 Ctrl+Q를 순서대로 눌러야 합니다.

한눈에 비교 ​

execattach
연결 대상새로 띄운 프로세스기존 메인 프로세스(PID 1)
나갈 때 컨테이너영향 없음exit 치면 컨테이너도 종료
안전하게 빠져나오기그냥 exitCtrl+P → Ctrl+Q
주 용도셸 접속, 디버깅실시간 로그 확인

참고: 개인 Notion 학습 노트