Primeiro, estou usando o docker 1.1.2 para cliente e servidor. Essa resposta pode ser obsoleta para versões mais recentes do docker, pois o docker evolui rapidamente.
Local do arquivo
Encontre o diretório do docker. Nos sistemas que usam o sistema no estilo apt / debian, o pacote instalado pelo repositório do docker é https://get.docker.com/ubuntu
utilizado /var/lib/docker
. As chances são de que o diretório esteja no mesmo local em outros sistemas (não é possível confirmar).
abaixo, containers/**CONTAINER_ID**
você encontrará informações sobre o contêiner. No arquivo **CONTAINER_ID**-json.log
dessa pasta, você encontrará um arquivo com todos os logs desse contêiner. Pode parecer um arquivo json, não é. É um fluxo que o json estrutura, um por linha, cada um contendo uma linha de log (cada linha termina com um }
e o próximo começa com a {
, portanto, não é um json válido como um todo).
Exemplo de local: - /var/lib/docker/containers/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6-json.log
Editando / Alterando esse arquivo
Sugiro que você use esse caminho para ver se é ou não a razão pela qual você está ficando sem espaço, mas não para fazer o log.
Prefiro garantir que o contêiner não registre muitas linhas (usando um CMD no dockerfile que redirecione a saída do seu processo para um arquivo em um volume ou para / dev / null - com os logs ativados com a configuração - e Depois, eu fazia o logrotate dos arquivos de log com outro contêiner)
docker inspect
é seu amigo.docker inspect --format='{{.LogPath}}' $INSTANCE_ID
docker-machine
Aqui está uma linha simples para limpar o arquivo de log do contêiner:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
fonte
docker-machine ssh default "echo '' | sudo tee $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)"
docker logs
está sempre vazio ...docker inspect --format='{{.LogPath}}' <container_name_or_id>
foi útil. Obrigado!se você executar
sudo lsof | grep '(deleted)'
, poderá achar que existem muitos arquivos de log de contêiner excluídos deixados abertos pela janela de encaixeEsses são logs que pertencem a um contêiner excluído. Uma maneira de fechá-las é reiniciando o daemon do docker em si. Isso nem sempre é viável.
Outra maneira de liberar esse espaço é encontrar o descritor de arquivo relevante e truncá-lo:
Onde
17511
está o pid da janela de encaixe ee49d81fc
faz parte do nome do arquivo de log / ID do contêiner incorreto. Aqui, o fd é / proc / 17511 / fd / 25, então nós o truncamos:fonte
: > /proc/17511/fd/25
Estou usando o Docker versão 1.13.0, compilação 49bf474
Se você estiver usando o formato de log padrão
json-file
, poderá especificar a opção para girar seus logs.Você pode configurar o daemon do docker para fazer isso ou configurá-lo por contêiner.
Por exemplo, tamanho do arquivo de log de 2 MB e máximo de 5 arquivos de log:
Daemon do Docker: Criar arquivo
/etc/docker/daemon.json
:Execução do Docker:
Para detalhes, consulte configuração de log e dockerd
fonte
Uma resposta tardia, mas qualquer pessoa no mesmo barco pode explorar melhor as opções para exportar os logs do docker para um local adequado para gerenciá-los. logspout é útil para selecionar logs de todos os contêineres do docker e enviá-los para algum lugar. Se você apenas precisar considerar isso, enviar para o daemon syslog do host pode ser uma boa abordagem, e você pode usar os mecanismos habituais para organizar esses arquivos em arquivos e rotacioná-los a partir daí. Para ambientes com vários hosts maiores, é possível consultar o envio para uma pilha "ELK". ou seja, Elasticsearch, Logstash e Kibana.
fonte
Para encontrar o local da janela de encaixe, você pode usar:
Se você deseja liberar espaço, pode fazer o seguinte:
Agora você pode excluir um contêiner com:
fonte
Vi este script na documentação oficial da janela de encaixe:
Funciona bem, mas o docker não libera a memória automaticamente ... O script apenas exclui os arquivos de log.
fonte