problema de espaço no docker devmapper e CentOS7

103

Estou aprendendo o docker e estou usando a v1.11.0. Estou tentando instalar o hadoop, mas o devmapper está reclamando de espaço livre em disco?

devmapper: Thin Pool has 82984 free data blocks which is less than minimum required 163840 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

Excluí todas as minhas imagens, mas o problema persiste:

[root@localhost hadoop_docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              latest              47af6ca8a14a        3 weeks ago         125 MB
[root@localhost hadoop_docker]#

e esta é minha configuração de disco:

[root@localhost ~]# lsblk
NAME                       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                          8:0    0    8G  0 disk
├─sda1                       8:1    0  500M  0 part /boot
└─sda2                       8:2    0  7.5G  0 part
  ├─centos-root            253:0    0  6.7G  0 lvm  /
  └─centos-swap            253:1    0  820M  0 lvm  [SWAP]
sr0                         11:0    1 1024M  0 rom
loop0                        7:0    0  100G  0 loop
└─docker-253:0-844682-pool 253:2    0  100G  0 dm
loop1                        7:1    0    2G  0 loop
└─docker-253:0-844682-pool 253:2    0  100G  0 dm

PERGUNTA: Como posso liberar espaço em disco?

obrigado

Manuel Sopena Ballesteros
fonte
1
Isso também está relacionado ao mapeador de dispositivos em problemas de armazenamento irrecuperável de loopback? github.com/docker/docker/issues/3182 "devicemapper não recomendado para uso em produção". Melhor se afastar do mapeador de dispositivos por alguns motivos. Achei fácil mudar para o driver de armazenamento de sobreposição, YMMV, é claro, mas espero que não muito. 'rm -rf / var / lib / docker' é um tanto opcional ao alternar, mas é fácil e eu o recomendo fortemente. projectatomic.io/blog/2015/06/…
gaoithe
1
Para sua informação, você pode ver o uso do disco do thin pool com " sudo lvs". Isso ajuda quando você está tentando descobrir "quanto" espaço em disco você precisa limpar (usando as respostas fornecidas).
Aaron D. Marasco,

Respostas:

28

Você pode usar:

docker system prune -a -f --volumes

Onde:

  • -a == remove todas as imagens não utilizadas
  • -f == force
  • --volumes == podar volumes.

consulte: https://docs.docker.com/engine/reference/commandline/system_prune/#description

como observação lateral, tive muitos problemas quando usei o driver devicemapper em meu ambiente. Eu costumava limpar como mencionei, mas ainda havia outros problemas com o mapeador de dispositivos. Eu recomendo fortemente mover para overlay2, ele resolveu quase tudo completamente.

Tidhar Klein Orbach
fonte
1
Regularmente, executamos os comandos na resposta de @Cokoda-Raka, mas para um determinado host Docker, esse comando era necessário quando overaly2 estava usando uma quantidade significativa de espaço em disco, mais do que deveria. Acho que vou adicionar esse comando às nossas tarefas de limpeza automatizadas também.
StockB
1
Isso ajudou no RHEL 7 com Docker 1.13.1. Após a execução docker container prune, docker image prune, docker volume prune, ainda temos o erro / Fina Piscina devmapper. O comando acima funcionou, liberando o espaço necessário e eliminando a necessidade de reiniciar o daemon.
Johnathan Elmore
167

Basta executar esses três. Não há necessidade de remover os recipientes RUNNING.

  1. Processos de saída de limpeza:

    docker rm $(docker ps -q -f status=exited)
    
  2. Volumes pendentes de limpeza:

    docker volume rm $(docker volume ls -qf dangling=true)
    
  3. Limpar imagens pendentes:

    docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
    
Cokorda Raka
fonte
4
Aprendi aqui: stackoverflow.com/questions/32723111/…
Cokorda Raka
19
A versão 1.13 agora permite invocar docker system prune docs.docker.com/engine/reference/commandline/system_prune
Vivek Kodira
1
Esta provavelmente deve ser a resposta aceita. A outra resposta pode potencialmente matar mais contêineres do que você deseja matar.
DigitalFiz
2
Esses comandos são muito úteis para limpar o disco da máquina, mas não corrigiram o problema com o mapeador de dispositivos e o espaço.
Paulo Oliveira
4
Ainda não entendo "o que" essa mensagem de erro significa, então, mesmo que esses comandos funcionem, eu não entenderia por quê. O que é "piscina fina"? E o que a saída de processos tem a ver com "liberação de blocos de dados"?
yiati