Falta de espaço na instância do EC2 devido a logs do docker

3

Eu ainda estou aprendendo o docker e a AWS, e tive um processo docker rodando um pouco com o armazenamento de 50GB EBS, e agora estou sem espaço em disco e, como resultado, o docker não inicia mais quando eu reinicio meu exemplo.

Quando tento sudo du -h / | grep '[0-9\.]\+G' , obtenho:

1.8G    /var/lib/docker/containers/f7cf0...
17G     /var/lib/docker/containers/55b7e...
2.8G    /var/lib/docker/containers/987b0...
22G     /var/lib/docker/containers/726b0...
44G     /var/lib/docker/containers
4.3G    /var/lib/docker/devicemapper/devicemapper
4.3G    /var/lib/docker/devicemapper
48G     /var/lib/docker
48G     /var/lib
48G     /var
0       /sys/bus/mdio_bus/drivers/Generic 10G PHY
50G     /

E quando tento sudo docker ps -a , obtenho:

Cannot connect to the Docker daemon. Is 'docker -d' running on this host?

Eu não quero tocar no processo 726b0 ..., isso é o mais importante. Isso causará problemas se eu excluir o arquivo .log para 55b7e ...? Existe uma maneira mais limpa de fazer isso do que apenas remover o arquivo?

    
por user1956609 29.05.2015 / 07:48

2 respostas

6

Se você estiver usando o Elastic Beanstalk para executar o Docker, isso pode interessá-lo.

Eu peguei o comando do Yonatan e o converti em um trabalho .ebextensions cron que será executado a cada X horas e limpe os logs do contêiner do Docker para que eles não se acumulem e entupam o servidor. Eu tive que modificá-lo para usar tee para evitar um redirecionamento ambíguo erro bash.

Basta criar um diretório .ebextensions em sua raiz do repositório (ao lado de Dockerrun.aws.json ) e um arquivo docker-log-truncate.config dentro dele com o seguinte conteúdo:

commands:
    add_docker_log_truncate_cronjob:
        command: "crontab -l | grep -q 'eb-docker' || (crontab -l ; echo '0 * */6 * * /bin/echo 0 | tee /var/log/eb-docker/containers/*/*.log')| crontab -"
        ignoreErrors: true

Nesse caso, o comando será executado a cada 6 dias e limpará os logs do contêiner do Docker. Note que não consegui atualizar meu Elastic Beanstalk com essa alteração até que eu terminei todos os servidores afetados, provavelmente porque o Beanstalk precisa de algum espaço livre em disco para implantar a nova versão.

    
por 04.01.2016 / 12:04
1

Eu executei com sucesso echo '' > /var/log/eb-docker/containers/*/*.log em um servidor de produção ao vivo sem problemas, para truncar um arquivo de log de 5 gb.

    
por 28.12.2015 / 16:15