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를 순서대로 눌러야 합니다.
한눈에 비교
| exec | attach | |
|---|---|---|
| 연결 대상 | 새로 띄운 프로세스 | 기존 메인 프로세스(PID 1) |
| 나갈 때 컨테이너 | 영향 없음 | exit 치면 컨테이너도 종료 |
| 안전하게 빠져나오기 | 그냥 exit | Ctrl+P → Ctrl+Q |
| 주 용도 | 셸 접속, 디버깅 | 실시간 로그 확인 |
참고: 개인 Notion 학습 노트