Docker를 사용하다 보면 실행 중인 컨테이너의 화면을 직접 확인하거나 프로그램과 상호작용해야 하는 경우가 있습니다. 예를 들어 백그라운드에서 실행 중인 애플리케이션의 출력 내용을 실시간으로 확인하거나, 표준 입력을 통해 직접 명령을 입력해야 하는 상황이 발생합니다.
이럴 때 사용하는 명령어가 바로 docker attach입니다.
Docker Attach는 현재 실행 중인 컨테이너의 표준 입력(Standard Input), 표준 출력(Standard Output), 표준 오류(Standard Error)에 직접 연결하는 명령어입니다.
다만 Docker Attach는 컨테이너 내부에서 새로운 명령을 실행하는 기능이 아니라 현재 실행 중인 프로세스에 연결하는 기능이라는 점에서 Docker Exec과 차이가 있습니다.
이번 글에서는 Docker Attach의 개념부터 기본 사용법, Docker Exec과의 차이점, 실무 활용 사례, 운영 시 주의사항까지 자세히 알아보겠습니다.
Docker Attach란 무엇인가?
Docker Attach는 실행 중인 컨테이너의 메인 프로세스에 직접 연결하는 명령어입니다.
컨테이너에서 출력되는 화면을 그대로 확인할 수 있으며 표준 입력도 함께 연결됩니다.
즉, 컨테이너를 처음 실행했을 때의 터미널에 다시 접속하는 기능이라고 생각하면 이해하기 쉽습니다.
Docker Attach는 언제 사용하는가?
다음과 같은 상황에서 자주 사용됩니다.
- 실행 중인 프로그램 화면 확인
- 실시간 출력 확인
- 표준 입력이 필요한 프로그램 사용
- 테스트 환경 디버깅
- 대화형 프로그램 제어
- 백그라운드 실행 프로그램 확인
운영 환경보다는 개발 및 테스트 환경에서 많이 사용됩니다.
Docker Attach 기본 사용법
기본 사용 방법은 다음과 같습니다.
docker attach <컨테이너명>
예를 들어 ubuntu-test 컨테이너에 연결하려면 다음과 같이 실행합니다.
docker attach ubuntu-test
현재 실행 중인 컨테이너 화면이 그대로 표시됩니다.
백그라운드 컨테이너 연결
백그라운드에서 실행 중인 nginx 컨테이너에도 연결할 수 있습니다.
docker attach nginx
nginx가 출력하는 로그나 메시지가 실시간으로 표시됩니다.
Attach 종료 방법
Attach를 종료하려면 단순히 Ctrl + C를 누르면 안 되는 경우가 있습니다.
일부 컨테이너에서는 Ctrl + C가 메인 프로세스를 종료시켜 컨테이너까지 함께 종료될 수 있습니다.
안전하게 Attach만 종료하려면 다음 단축키를 사용합니다.
Ctrl + P
Ctrl + Q
이 단축키를 사용하면 컨테이너는 계속 실행되고 현재 터미널만 분리됩니다.
운영 환경에서는 반드시 이 방법을 사용하는 것이 좋습니다.
Docker Attach와 Docker Exec의 차이
Docker Attach는 현재 실행 중인 메인 프로세스에 연결합니다.
반면 Docker Exec은 실행 중인 컨테이너 안에서 새로운 프로세스를 실행합니다.
예를 들어 Bash Shell을 새로 실행하려면 Docker Exec을 사용합니다.
docker exec -it nginx bash
현재 실행 중인 프로그램 화면을 그대로 확인하려면 Docker Attach를 사용합니다.
즉, 새로운 작업을 시작하는 것이 목적이라면 Docker Exec이 적합하고 현재 프로그램과 직접 연결하는 것이 목적이라면 Docker Attach가 적합합니다.
Docker Attach 동작 방식
Docker 컨테이너는 하나의 메인 프로세스를 중심으로 실행됩니다.
Docker Attach는 이 메인 프로세스의 표준 입력과 출력을 현재 터미널에 그대로 연결합니다.
따라서 새로운 Shell이 생성되는 것이 아니라 원래 실행 중인 프로세스를 그대로 제어하게 됩니다.
이 때문에 Attach 사용 시 입력한 내용이 실제 프로그램으로 전달된다는 점을 반드시 이해해야 합니다.
Docker Attach 실무 활용 예제
Docker Attach는 실행 중인 프로그램을 직접 확인하거나 대화형 프로그램과 상호작용해야 하는 상황에서 유용합니다. 다만 운영 환경에서는 잘못 사용할 경우 컨테이너를 종료할 수도 있으므로 사용 목적을 명확히 이해하는 것이 중요합니다.
백그라운드 프로그램 출력 확인
백그라운드에서 실행 중인 컨테이너의 출력 내용을 직접 확인하려면 다음 명령을 사용합니다.
docker attach myapp
애플리케이션이 출력하는 로그와 메시지가 실시간으로 표시됩니다.
프로그램이 정상적으로 동작하는지 빠르게 확인할 수 있습니다.
대화형 프로그램 연결
다음과 같이 대화형 모드로 실행한 컨테이너가 있다고 가정해 보겠습니다.
docker run -dit --name ubuntu-test ubuntu bash
이후 Attach를 실행하면 현재 Bash 세션으로 다시 연결됩니다.
docker attach ubuntu-test
처음 실행했던 Shell 환경을 그대로 이어서 사용할 수 있습니다.
프로그램 입력 전달
Attach는 현재 실행 중인 프로그램에 직접 입력을 전달합니다.
예를 들어 Python 인터프리터를 실행한 컨테이너라면 입력한 Python 코드가 그대로 실행됩니다.
새로운 터미널이 생성되는 것이 아니라 기존 프로그램을 계속 사용하는 방식입니다.
Attach만 종료하기
컨테이너를 계속 실행한 상태에서 터미널만 분리하려면 다음 단축키를 사용합니다.
Ctrl + P
Ctrl + Q
이 방법을 사용하면 컨테이너는 계속 실행되고 현재 터미널만 종료됩니다.
Linux 서버 문제 해결
운영 중인 컨테이너가 정상적으로 실행되고 있었지만 애플리케이션 화면이 출력되지 않는 문제가 발생했습니다.
먼저 컨테이너 상태를 확인했습니다.
docker ps
컨테이너는 정상적으로 실행 중이었습니다.
프로그램이 어떤 상태인지 확인하기 위해 Attach를 실행했습니다.
docker attach my-service
실시간으로 출력되는 내용을 확인한 결과 애플리케이션이 사용자 입력을 기다리는 상태였습니다.
입력 오류를 수정한 후 프로그램은 정상적으로 동작했습니다.
작업이 끝난 후에는 다음 단축키를 사용하여 컨테이너를 종료하지 않고 Attach만 종료했습니다.
Ctrl + P
Ctrl + Q
덕분에 서비스 중단 없이 문제를 해결할 수 있었습니다.
Docker Attach 사용 시 주의사항
Docker Attach를 사용할 때는 몇 가지 사항을 반드시 알아두어야 합니다.
첫 번째는 새로운 Shell을 실행하는 명령이 아니라는 점입니다.
현재 실행 중인 메인 프로세스에 연결하는 기능입니다.
두 번째는 Ctrl + C를 잘못 사용하면 메인 프로세스가 종료되어 컨테이너까지 종료될 수 있습니다.
운영 서버에서는 반드시 Ctrl + P, Ctrl + Q를 사용하여 안전하게 분리하는 것이 좋습니다.
세 번째는 여러 사용자가 동시에 Attach할 수도 있습니다.
동일한 표준 입력과 출력을 공유하기 때문에 예상하지 못한 입력 충돌이 발생할 수 있습니다.
네 번째는 대부분의 운영 작업에는 Docker Exec이 더 적합합니다.
컨테이너 내부에서 새로운 명령을 실행하려면 Docker Exec을 사용하는 것이 일반적입니다.
Best Practice
Docker Attach를 사용할 때는 다음과 같은 방법을 추천합니다.
- 현재 실행 중인 프로그램을 확인할 때만 사용합니다.
- 운영 서버에서는 Docker Exec을 우선 고려합니다.
- 종료 시에는
Ctrl + P,Ctrl + Q를 사용합니다. - 메인 프로세스 종료 여부를 항상 확인합니다.
- 여러 관리자가 동시에 Attach하지 않도록 주의합니다.
- 장애 분석 시 Docker Logs와 함께 활용합니다.
이러한 방법을 적용하면 컨테이너를 안전하게 관리할 수 있습니다.
자주 묻는 질문
Docker Attach와 Docker Exec의 가장 큰 차이는 무엇인가요?
Docker Attach는 현재 실행 중인 메인 프로세스에 연결합니다.
Docker Exec은 실행 중인 컨테이너 안에서 새로운 프로세스를 실행합니다.
Docker Attach를 종료하면 컨테이너도 종료되나요?
Ctrl + C를 누르면 종료될 수 있습니다.
컨테이너를 계속 실행하려면 Ctrl + P, Ctrl + Q를 사용해야 합니다.
Docker Attach로 Bash를 실행할 수 있나요?
아닙니다.
Bash를 새로 실행하려면 다음과 같이 Docker Exec을 사용해야 합니다.
docker exec -it ubuntu-test bash
운영 서버에서는 Docker Attach를 많이 사용하나요?
일반적으로는 Docker Exec을 더 많이 사용합니다.
Docker Attach는 현재 실행 중인 프로그램을 직접 확인해야 하는 특수한 상황에서 사용하는 경우가 많습니다.
마무리
Docker Attach는 실행 중인 컨테이너의 메인 프로세스에 직접 연결하여 현재 프로그램의 입력과 출력을 그대로 확인할 수 있는 명령어입니다.
실시간 화면 확인이나 대화형 프로그램 제어에는 매우 유용하지만, 새로운 작업을 수행하는 용도는 아니며 잘못 사용하면 컨테이너가 종료될 수도 있습니다.
실무에서는 Docker Attach보다 Docker Exec을 사용하는 경우가 더 많지만, 현재 실행 중인 프로그램을 그대로 확인해야 하는 상황에서는 Docker Attach가 가장 적합한 도구입니다.