> **3줄 요약** > > * Docker 컨테이너의 콘솔 로그는 시스템 **메모리가 아닌 호스트의 디스크에 파일로 저장**됩니다. > * `docker logs` 명령어는 이 저장된 파일을 읽어와 보여주는 역할을 합니다. > * 로그 파일이 무한정 커지는 것을 방지하려면 **로그 로테이션 옵션(`max-size`, `max-file`)을 설정**하는 것이 매우 중요합니다. ## 1\. 로그는 어디에 어떻게 저장되나요? {#sec-5e033fc12a0a} [[Docker]]는 컨테이너의 표준 출력(stdout)과 표준 에러(stderr) 스트림을 모두 캡처하여 **로깅 드라이버(Logging Driver)** 를 통해 처리합니다. 특별한 설정을 하지 않았다면, Docker는 기본적으로 `json-file` 로깅 드라이버를 사용합니다. * **저장 위치**: 컨테이너의 로그는 호스트 시스템의 특정 경로에 JSON 형식의 파일로 저장됩니다. 일반적으로 경로는 다음과 같습니다. * `/var/lib/docker/containers/[컨테이너_ID]/[컨테이너_ID]-json.log` * **`docker logs` 명령어**: 이 명령어는 사실 메모리에 있는 내용을 보여주는 것이 아니라, 위에 언급된 JSON 로그 파일을 읽어서 터미널에 보여주는 것입니다. ![ChatGPT Image 2026년 5월 12일 오후 12_37_29.png](/media/whitedec/blog_img/ff3498a786c645ecb031d714a053d4a4.webp) ## 2\. 로그가 계속 쌓이면 디스크 용량이 부족해지지 않나요? {#sec-eea2c48f44a4} 네, 맞습니다. 아무런 조치를 하지 않으면 로그 파일이 계속 커져서 호스트의 디스크 용량을 모두 차지할 수 있습니다. 이를 방지하기 위해 Docker는 로그 파일의 크기와 개수를 제한하는 **로그 로테이션(Log Rotation)** 옵션을 제공합니다. 예를 들어, `docker run` 명령어를 실행할 때 다음과 같은 옵션을 추가할 수 있습니다. ``` docker run -d \ --log-driver json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ nginx ``` * `--log-opt max-size=10m`: 로그 파일 하나의 최대 크기를 **10MB**로 제한합니다. * `--log-opt max-file=3`: 로그 파일의 최대 개수를 **3개**로 제한합니다. 3개가 넘어가면 가장 오래된 파일부터 삭제됩니다. 이렇게 설정하면 해당 컨테이너의 로그는 최대 30MB(10MB \* 3개)까지만 디스크 공간을 사용하게 됩니다. *** ## 3. `docker-compose.yml` 파일에 설정하기 {#sec-139920b1bd10} Docker Compose에서는 `docker-compose.yml` 파일 안에서 각 서비스별로 로깅 옵션을 아주 쉽게 설정할 수 있습니다. `docker run` 명령어의 `--log-opt` 플래그가 YAML 형식으로 들어간다고 생각하시면 됩니다. 아래는 `my-app`이라는 서비스에 로그 로테이션을 적용하는 예시입니다. ``` services: my-app: image: your-app-image # ... 다른 설정들 ... deploy: resources: limits: memory: 512M # 👇 이 부분이 로그 설정입니다. logging: driver: "json-file" # 사용할 로깅 드라이버 (기본값이므로 생략 가능) options: max-size: "10m" # 파일당 최대 크기: 10MB max-file: "3" # 최대 파일 개수: 3개 ``` * **`logging`**: 해당 서비스의 로깅 설정을 시작하는 키입니다. * **`driver`**: 사용할 로깅 드라이버를 지정합니다. `json-file`이 기본값입니다. * **`options`**: 드라이버에 전달할 옵션을 설정합니다. * **`max-size`**: `docker run`의 `--log-opt max-size`와 동일합니다. * **`max-file`**: `docker run`의 `--log-opt max-file`과 동일합니다. 이제 `docker-compose up`으로 이 서비스를 시작하면, `my-app` 컨테이너의 로그는 자동으로 로테이션되어 최대 30MB(10MB \* 3개)의 디스크 공간만 사용하게 됩니다. ## 4\. 모든 컨테이너에 기본값으로 설정하기 {#sec-2341f653319f} 만약 모든 컨테이너에 일일이 옵션을 주기 번거롭고, 시스템 전체에 기본 정책을 적용하고 싶다면 **Docker 데몬(Daemon) 설정** 파일을 수정하는 방법이 가장 좋습니다. 1. `/etc/docker/daemon.json` 파일을 열거나 생성합니다. (파일이 없다면 새로 만드세요.) 2. 아래와 같이 내용을 작성합니다. ```json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } ``` 3\. \[\[Docker\]\] 데몬을 재시작합니다\. ```bash sudo systemctl restart docker ``` 이렇게 설정하면, 앞으로 생성되는 **모든 컨테이너**는 별도의 로깅 설정을 하지 않는 한 자동으로 이 정책을 따르게 됩니다. 물론, `docker-compose.yml` 파일이나 `docker run` 명령어에서 특정 컨테이너에 대해 다른 로깅 옵션을 지정하면 **개별 설정이 데몬 설정보다 우선** 적용됩니다. * **개별 서비스 설정**: `docker-compose.yml` 파일 내의 `logging` 섹션에서 설정하는 것이 가장 일반적이고 편리합니다. * **글로벌 기본 설정**: 서버의 모든 컨테이너에 일괄적인 정책을 적용하려면 `/etc/docker/daemon.json` 파일을 수정하세요.