Po pierwsze, używam dokera 1.1.2 zarówno dla klienta, jak i serwera, ta odpowiedź może być nieaktualna w przypadku nowszych wersji dokera, ponieważ doktor ewoluuje szybko.
Lokalizacja pliku
Znajdź katalog dokerów. W systemach korzystających z systemu w stylu apt / debian, pakiet instalowany przez repozytorium dokerów https://get.docker.com/ubuntu
używa /var/lib/docker
. Istnieje prawdopodobieństwo, że katalog znajduje się w tym samym miejscu w innych systemach (nie można potwierdzić).
pod containers/**CONTAINER_ID**
znajdziesz informacje o kontenerze. W pliku **CONTAINER_ID**-json.log
w tym folderze znajdziesz plik ze wszystkimi dziennikami dla tego kontenera. Może to wyglądać jak plik json, tak nie jest. Jest to przepływ struktur json, jeden na linię, każda zawierająca jedną linię logu (każda linia kończy się na a, }
a kolejna zaczyna się na a {
, więc nie jest to prawidłowy json jako całość).
Przykładowa lokalizacja: - /var/lib/docker/containers/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6-json.log
Edycja / Zmiana tego pliku
Sugeruję, abyś użył tej ścieżki, aby zobaczyć, czy nie, to jest powód, dla którego brakuje Ci miejsca, ale nie logujesz ich obracania.
Wolę upewnić się, że kontener nie rejestruje zbyt wielu wierszy (za pomocą CMD w pliku docker, który albo przekierowuje dane wyjściowe twojego procesu do pliku w wolumenie lub do / dev / null - z logami włączonymi w konfiguracji - i Następnie logowałbym pliki dziennika w innym kontenerze)
docker inspect
jest twoim przyjacielem.docker inspect --format='{{.LogPath}}' $INSTANCE_ID
docker-machine
Oto prosty, jednowarstwowy program do czyszczenia pliku dziennika kontenera:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
źródło
docker-machine ssh default "echo '' | sudo tee $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)"
docker logs
jest zawsze pusty ...docker inspect --format='{{.LogPath}}' <container_name_or_id>
było przydatne. Dzięki!po uruchomieniu
sudo lsof | grep '(deleted)'
może się okazać, że wiele usuniętych plików dziennika kontenera pozostaje otwartych przez okno dokowaneSą to dzienniki należące do usuniętego kontenera. Jednym ze sposobów ich zamknięcia jest zrestartowanie samego demona dokera. Nie zawsze jest to możliwe.
Innym sposobem na zwolnienie tego miejsca jest znalezienie odpowiedniego deskryptora pliku i obcięcie go:
Gdzie
17511
jest pid dokera ie49d81fc
jest częścią obrażającej nazwy pliku / identyfikatora kontenera. Tutaj fd to / proc / 17511 / fd / 25, więc obcinamy go:źródło
: > /proc/17511/fd/25
Korzystam z Docker w wersji 1.13.0, kompilacja 49bf474
Jeśli używasz domyślnego formatu rejestrowania
json-file
, możesz określić opcję obracania dzienników.Możesz tak skonfigurować demona dokera lub ustawić go dla każdego kontenera.
Na przykład rozmiar pliku dziennika 2 MB i maksymalnie 5 plików dziennika:
Demon dokera: Utwórz plik
/etc/docker/daemon.json
:Uruchomienie dokera:
Aby uzyskać szczegółowe informacje, zobacz rejestrowanie i konfiguracja dokera
źródło
Późna odpowiedź, ale każdemu na tej samej łodzi lepiej byłoby zbadać opcje eksportowania dzienników dokerów do miejsca, w którym można je zarządzać. logspout jest przydatny do pobierania dzienników ze wszystkich kontenerów dokerów i wysyłania ich gdzieś. JEŚLI musisz tylko wziąć to pod uwagę, dobrym pomysłem może być wysłanie ich do demona syslog hosta i możesz użyć zwykłych mechanizmów do porządkowania tych plików i obracania ich stamtąd. W przypadku większych środowisk z wieloma hostami możesz spojrzeć na wysyłkę do stosu „ELK”. tj. Elasticsearch, Logstash i Kibana.
źródło
Aby znaleźć lokalizację dokera, możesz użyć:
Jeśli chcesz zwolnić miejsce, możesz to zrobić w następujący sposób:
Teraz możesz usunąć kontener za pomocą:
źródło
Widziałem ten skrypt w oficjalnej dokumentacji dokera:
Działa dobrze, ale doker nie zwalnia pamięci automatycznie ... Skrypt po prostu usuwa pliki dziennika.
źródło