업무 중 컨테이너가 갑자기 사라진 상황을 겪었다. 그래서 Docker 컨테이너의 생성 및 삭제 이력을 확인할 수 있는 방법을 찾아야 했다. 이 과정을 정리해본다.
1. Docker 기본 명령어 한계
처음에는 docker ps -a
명령어를 사용해봤다. 이 명령어로는 종료된 컨테이너까지는 확인할 수 있었지만, docker rm
명령어로 삭제된 컨테이너는 이력조차 남지 않는다는 사실을 알게 되었다.
2. 시스템 로그(journalctl)로 확인
Docker 데몬이 남긴 시스템 로그를 확인하면 컨테이너 생성과 삭제 흔적을 찾을 수 있었다.
journalctl -u docker.service
추가로 grep
을 사용해서 컨테이너 관련 로그만 필터링했다.
journalctl -u docker.service | grep 'container'
3. auditd로 명령어 추적
시스템에 auditd가 설치되어 있었다면 docker
명령 자체를 추적할 수 있었다.
ausearch -x docker
이를 통해 누군가 docker rm
명령어를 썼는지도 확인할 수 있다.
4. /var/lib/docker/containers 디렉토리 살펴보기
삭제되었더라도 /var/lib/docker/containers
디렉토리에 컨테이너의 로그 파일이 남아있을 수도 있었다.
ls /var/lib/docker/containers/*/*-json.log
다만 이 방법은 완벽하지 않다. 컨테이너가 삭제되면서 로그 파일도 함께 사라질 수 있기 때문이다.
5. docker events로 이력 조회
가장 유용했던 방법은 docker events
명령어를 사용하는 것이었다. 특정 기간 동안의 컨테이너 생성 및 삭제 이벤트를 조회할 수 있었다.
docker events --since '2025-04-21T00:00:00' --until '2025-04-22T00:00:00'
결과 예시:
2025-04-22T09:33:12.000000000Z container create <container-id> (image=nginx)
2025-04-22T09:34:10.000000000Z container destroy <container-id> (image=nginx)
단점은 docker events
도 기본적으로 메모리 기반이라 장기 보존이 안 된다는 점이다.
6. 향후 방지: 로그 수집 시스템 구축
이번 일을 계기로, 반복 방지를 위해 로그 수집 시스템을 구축하기로 했다. 예를 들어:
- ELK Stack (Elasticsearch + Logstash + Kibana)
- Grafana + Loki
- Datadog, Prometheus, Fluentd 연동 등
docker events
를 별도로 수집해두면 나중에 언제 누가 컨테이너를 만들고 지웠는지 정확하게 파악할 수 있다.
최종 정리
docker ps -a
로는 삭제된 컨테이너 이력 확인 불가- systemd(journalctl) 로그나 auditd로 추적 가능
docker events
명령어로 삭제/생성 이력 직접 조회 가능- 근본적 해결은 이벤트 로그를 장기 보관하는 시스템 구축
이 경험을 통해 장애 대응 시 단순히 컨테이너 현황만 보는 것이 아니라 시스템 로그와 이벤트 추적까지 함께 보는 습관을 들이는 것이 중요하다는 것을 깨달았다.
'개발 (Development) > Docker' 카테고리의 다른 글
[Docker] Docker 환경에서 yarn 설치 시 인증서 오류 해결 (0) | 2025.06.01 |
---|---|
[Docker] on-premise 환경에서 Docker Compose의 Build 문제 해결 (0) | 2025.06.01 |
[Docker] Alpine 이미지 SSL 인증 오류 해결 (certificate verify failed) (0) | 2025.06.01 |
[Docker] Dockerfile에서 chown이 동작하지 않을 때, 의외의 원인과 해결법 (0) | 2025.04.19 |
[Docker] Docker 로그 필터링 - grep 사용 시 문제와 해결 팁 (0) | 2024.12.30 |