Programing

Docker 컨테이너의 로그를 올바르게 지우는 방법은 무엇입니까?

crosscheck 2020. 6. 13. 10:18
반응형

Docker 컨테이너의 로그를 올바르게 지우는 방법은 무엇입니까?


docker logs [container-name]특정 컨테이너의 로그를 보는 데 사용 합니다.

이 로그를 지우는 우아한 방법이 있습니까?


이 질문 에서 실행할 수있는 하나의 라이너가 있습니다.

echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)

나는 Docker의 외부 파일이기 때문에 Docker의 파일을이 명령, truncate 명령 또는 로그 회전으로 직접 수정하는 데 큰 관심이 없습니다. docker가 json 형식의 데이터를 파일에 쓰는 동안 부분적인 줄이 생겨 docker logsCLI 에서 로그를 읽는 기능이 손상되는 동안 외부 로그 삭제가 발생할 수 있습니다.

대신 Docker가 자동으로 로그를 회전하도록 할 수 있습니다. 기본 JSON 로깅 드라이버를 사용하는 경우 dockerd에 추가 플래그를 사용하여 수행됩니다 .

dockerd ... --log-opt max-size=10m --log-opt max-file=3

시작 스크립트를 수정하는 대신 이것을 daemon.json 파일의 일부로 설정할 수도 있습니다 .

{
  "log-driver": "json-file",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}

systemctl reload docker설정을 적용하려면이 파일을 변경 a를 실행하십시오 . 이 설정은 새로 만든 컨테이너의 기본값이됩니다. 새 로그 제한을 받으려면 기존 컨테이너를 삭제하고 다시 만들어야합니다. 또한 유사한 로그 옵션을 개별 컨테이너에 전달하여 이러한 기본값을 무시할 수 있으므로 개별 컨테이너에 더 많거나 적은 로그를 저장할 수 있습니다.


사용하다:

truncate -s 0 /var/lib/docker/containers/*/*-json.log

참조 : 파일을 사용하는 동안 파일 잘라 내기 (Linux)


sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"

정기적으로 로그를 지우도록 logrotate를 설정할 수 있습니다.

/etc/logrotate.d/docker-logs의 예제 파일

/var/lib/docker/containers/*/*.log {
 rotate 7
 daily
 compress
 size=50M
 missingok
 delaycompress
 copytruncate
}

Windows의 Docker 및 아마도 다른 것에서도 tail 옵션을 사용할 수 있습니다.

예 : 도커 로그 -f --tail 100 msftmodbus

이런 식으로, 마지막 100 줄만 표시되며 1M 줄을 먼저 스크롤 할 필요가 없습니다…

(따라서 로그를 삭제해야 할 수도 있습니다)


Docker 명령을 통해 직접 수행 할 수 없습니다.

로그 크기를 제한하거나 스크립트를 사용하여 컨테이너와 관련된 로그를 삭제할 수 있습니다. 스크립트 예제는 아래에서 읽을 수 있습니다 (아래에서 읽음). 기능 : 로그 기록을 지우는 기능 # 1083

docker-compose 파일 참조 로깅 섹션확인하십시오 . 여기서 일부 로깅 드라이버에 대한 옵션 (예 : 로그 회전 및 로그 크기 제한)을 지정할 수 있습니다.


2018 솔루션 인 Docker4Mac :

LOGPATH=$(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 -m -u -n -i -- truncate -s0 $LOGPATH

첫 번째 줄은 허용되는 답변과 비슷한 로그 파일 경로를 가져옵니다.

두 번째 줄에서는 Docker4Mac의 모든 도커 컨테이너에 대한 호스트로 서버 인 VM nsenter에서 명령을 실행할 수 있습니다 xhyve. 우리가 실행하는 명령은 truncate -s0 $LOGPATHMac 이외의 답변에 익숙 합니다.

를 사용하는 경우 docker-compose첫 번째 줄은 다음과 같습니다.

local LOGPATH=$(docker inspect --format='{{.LogPath}}' $(docker-compose ps -q <service>))

그리고 <service>당신의 서비스 이름입니다 docker-compose.yml파일.

트릭에 대한 https://github.com/justincormack/nsenter1 에게 감사합니다 nsenter.


루트 사용자 로서 다음을 실행하십시오.

>  /var/lib/docker/containers/*/*-json.log

또는

cat /dev/null > /var/lib/docker/containers/*/*-json.log

또는

echo "" > /var/lib/docker/containers/*/*-json.log

내 우분투 서버에서 sudo로도 얻을 수 있습니다. Cannot open ‘/var/lib/docker/containers/*/*-json.log’ for writing: No such file or directory

그러나 도커를 빗질하면 답을 검사하고 자릅니다.

sudo truncate -s 0 `docker inspect --format='{{.LogPath}}' <container>`

Mac 사용자를위한 Docker는 다음과 같습니다.

    1. 다음을 통해 로그 파일 경로를 찾으십시오.

      $ docker inspect | grep log

    1. 도커 시스템에 SSH (이름이 default아닌 경우 docker-machine ls찾기 위해 실행 한다고 가정 ) :

      $ docker-machine ssh default

    1. Change to root user(reference):

      $ sudo -i

    1. Delete the log file content:

      $ echo "" > log_file_path_from_step1

참고URL : https://stackoverflow.com/questions/42510002/how-to-clear-the-logs-properly-for-a-docker-container

반응형