Docker 컨테이너의 로그를 올바르게 지우는 방법은 무엇입니까?
docker logs [container-name]
특정 컨테이너의 로그를 보는 데 사용 합니다.
이 로그를 지우는 우아한 방법이 있습니까?
이 질문 에서 실행할 수있는 하나의 라이너가 있습니다.
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
나는 Docker의 외부 파일이기 때문에 Docker의 파일을이 명령, truncate 명령 또는 로그 회전으로 직접 수정하는 데 큰 관심이 없습니다. docker가 json 형식의 데이터를 파일에 쓰는 동안 부분적인 줄이 생겨 docker logs
CLI 에서 로그를 읽는 기능이 손상되는 동안 외부 로그 삭제가 발생할 수 있습니다.
대신 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 $LOGPATH
Mac 이외의 답변에 익숙 합니다.
를 사용하는 경우 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는 다음과 같습니다.
-
다음을 통해 로그 파일 경로를 찾으십시오.
$ docker inspect | grep log
-
도커 시스템에 SSH (이름이
default
아닌 경우docker-machine ls
찾기 위해 실행 한다고 가정 ) :$ docker-machine ssh default
-
Change to root user(reference):
$ sudo -i
-
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
'Programing' 카테고리의 다른 글
UINavigationController“뒤로 버튼”사용자 정의 텍스트? (0) | 2020.06.13 |
---|---|
100 % 너비 div 안에 절대 위치 요소를 수평으로 가운데에 배치하려면 어떻게합니까? (0) | 2020.06.13 |
Android에서 버튼을 제거하거나 보이지 않게하려면 어떻게해야합니까? (0) | 2020.06.13 |
StoryBoard에서 탭 막대 컨트롤러 순서 재정렬 (0) | 2020.06.13 |
WPF에서 하이퍼 링크를 사용하는 예 (0) | 2020.06.13 |