답변:
이 질문 에서 실행할 수있는 하나의 라이너가 있습니다.
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
또는 비슷한 잘림 명령이 있습니다.
truncate -s 0 $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
Docker의 파일을 직접 수정하기 때문에 둘 중 하나의 팬이 아닙니다. 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를 실행하십시오 . 이 설정은 새로 만든 컨테이너의 기본값이됩니다. 새 로그 제한을 받으려면 기존 컨테이너를 삭제하고 다시 만들어야합니다.
이와 유사한 로그 옵션을 개별 컨테이너에 전달하여 이러한 기본값을 재정의 할 수 있으므로 개별 컨테이너에 더 많거나 적은 로그를 저장할 수 있습니다. 에서 docker run
와 같은이 모습 :
docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 ...
또는 작성 파일에서 :
version: '3.7'
services:
app:
image: ...
logging:
options:
max-size: "10m"
max-file: "3"
추가 공간 절약을 위해 json 로그 드라이버에서 "로컬"로그 드라이버로 전환 할 수 있습니다. 동일한 max-size 및 max-file 옵션이 필요하지만 json에 저장하는 대신 더 빠르고 작은 이진 구문을 사용합니다. 이를 통해 동일한 크기의 파일에 더 많은 로그를 저장할 수 있습니다. 이에 대한 daemon.json 항목은 다음과 같습니다.
{
"log-driver": "local",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
로컬 드라이버의 단점은 json 로그에 대한 직접 액세스에 의존하는 외부 로그 파서 / 전달자가 더 이상 작동하지 않습니다. 따라서 filebeat와 같은 도구를 사용하여 Elastic 또는 Splunk의 유니버설 포워더로 보내면 "로컬"드라이버를 피할 수 있습니다.
나는 팁과 트릭 프레젠테이션 에서 이것에 대해 조금 더 알게되었습니다 .
service docker restart
그 자체로는 효과가 없었습니다. 또한 새로운 컨테이너를 만들려면 브랜드를 만들어야했습니다. 즉, 오래된 컨테이너를 가져 오는 것만으로 새로운 로깅이 적용되지 않았습니다
echo -n > ...
. 어쨌든 내 로그를 더 잘 제어 할 수 있기를 원합니다. 예를 들어, docker-compose restart 후에 는 보존 된 로그로 무언가를 수행하는 메커니즘을 갖고 싶습니다.
사용하다:
truncate -s 0 /var/lib/docker/containers/*/*-json.log
당신은 sudo가 필요할 수 있습니다
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
심판. 제프 에스 Docker 컨테이너의 로그를 올바르게 지우는 방법은 무엇입니까?
containers
밖의 내용은 사용할 수 없습니다.
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
-나를 위해 일했다
error from daemon in stream: Error grabbing logs: invalid character '\x00' looking for beginning of value
Windows 및 Mac 용 Docker 및 기타 장치에서도 tail 옵션을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
docker logs -f --tail 100
이렇게하면 마지막 100 줄만 표시되며 1M 줄을 먼저 스크롤 할 필요가 없습니다 ...
(따라서 로그를 삭제해야 할 수도 있습니다)
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
sudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log"
의 전체 크기 만 가져 오십시오.sudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log | grep total"
정기적으로 로그를 지우도록 logrotate를 설정할 수 있습니다.
/etc/logrotate.d/docker-logs의 예제 파일
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size=50M
missingok
delaycompress
copytruncate
}
docker run
? 와 함께 기본값으로 사용됩니다 . 파일 /etc/logrotate.d/docker-logs
이 존재하지 않습니다. 파일 을 만들어야합니까?
"log-opts"
BMitch에 의해 표시됨)
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
.
docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 -m -u -n -i -- sh -c 'truncate -s0 /var/lib/docker/containers/*/*-json.log'
Docker 명령을 통해 직접 수행 할 수 없습니다.
로그 크기를 제한하거나 스크립트를 사용하여 컨테이너와 관련된 로그를 삭제할 수 있습니다. 스크립트 예제는 아래에서 읽을 수 있습니다 (아래에서 읽음). 기능 : 로그 기록을 지우는 기능 # 1083
docker-compose 파일 참조 의 로깅 섹션 을 확인하십시오 . 여기서 일부 로깅 드라이버에 대한 옵션 (예 : 로그 회전 및 로그 크기 제한)을 지정할 수 있습니다.
다음 docker run
과 같이 명령 행 에서 log-opts 매개 변수를 제공 할 수도 있습니다 .
docker run --log-opt max-size=10m --log-opt max-file=5 my-app:latest
또는 이와 같은 docker-compose.yml에서
my-app:
image: my-app:latest
logging:
driver: "json-file"
options:
max-file: "5"
max-size: 10m
크레딧 : https://medium.com/@Quigley_Ja/rotating-docker-logs-keeping-your-overlay-folder-small-40cfa2155412 (James Quigley)
"5"
하면 작동합니다. 10m
참 인용없이 작동합니다.
Mac 사용자를위한 Docker는 다음과 같습니다.
다음을 통해 로그 파일 경로를 찾으십시오.
$ docker inspect | grep log
도커 시스템에 SSH (이름이 default
아닌 경우 docker-machine ls
찾기 위해 실행 한다고 가정 ) :
$ docker-machine ssh default
루트 사용자 ( reference )로 변경하십시오 .
$ sudo -i
로그 파일 내용을 삭제하십시오.
$ echo "" > log_file_path_from_step1
docker exec -it default sh
컨테이너에 sh 쉘을 입력하는 데 사용할 수 있습니다 . 그러나 많은 컨테이너가 암시 적으로 sudo
명령을 사용 가능 하게하지 않습니다 .
sudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log"