O mecanismo Docker não me permite remover os contêineres antigos

1

Eu tenho um host do Docker com muitos contêineres que saíram. Por minha desatenção, o servidor host ficou sem espaço em disco devido em grande parte a esses contêineres. Tentei excluí-los com docker rm , mas recebi um erro sobre não ter espaço em disco suficiente para fazer a remoção. Eu não percebi o significado potencial disso na época, no entanto, e não tenho mais a mensagem específica.

Em seguida, libertei algum espaço no dispositivo e tentei docker rm novamente e agora recebo esta mensagem:

[me@machine ~]$ docker rm amazing_mahavira
Error response from daemon: Driver devicemapper failed to remove root filesystem 92c18d5ebe6cgc328225353064f30b1cb78e1ea668aad05c3d3d6e7095e20524:
devicemapper: Error running DeleteDevice dm_task_run failed

Tentando docker save minhas imagens também falharem.

Aqui está a saída de armazenamento docker info :

Storage Driver: devicemapper
 Pool Name: docker-253:0-273125642-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: xfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 92.09 GB
 Data Space Total: 107.4 GB
 Data Space Available: 14.24 MB
 Metadata Space Used: 587.1 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 14.24 MB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data

Eu vejo este link com um problema semelhante e sem outra solução sugerida parece um bug. Eu procurei no Docker Github por problemas semelhantes e não vi nenhum.

Qual é a melhor maneira de limpar tudo isso para que eu possa ter um host de encaixe de trabalho novamente? Não há containers ou imagens que eu deva manter, embora eu realmente queira salvar algumas imagens. Posso ressuscitar esta instalação ou estou condenado?

O servidor é o RHEL 7.2, FWIW.

    
por Chris Farmer 11.08.2016 / 06:03

1 resposta

3

Eu nunca consegui consertar a corrupção do arquivo de loop do docker devmapper.

Se a reinicialização de toda a máquina não puder consertá-lo e você não puder salvar suas imagens com docker save , marcarei uma perda total na configuração da janela de encaixe.

Uma maneira rápida e simples de recuperá-lo de forma impecável, é a seguinte:

sudo service docker stop
sudo rm /var/lib/docker/*
sudo service start

Isso excluirá todos seus dados atuais do docker, para imagens, contêineres, volumes, redes, qualquer coisa. O Docker recriará todos os arquivos necessários e será como novo.

Como etapas próximas ao futuro, provavelmente seria bom não apenas colocar o monitoramento no espaço em disco, mas também trocar para um dos outros drivers de armazenamento.

Consulte os documentos do docker sobre esse assunto. O mais fácil provavelmente seria o overlay (ou overlay2 se você tiver um kernel 4.0+) se o seu kernel suportar, ou aufs (provavelmente não é tão fácil no RHEL, desde que não seja oficialmente suportado).

Outra solução, um pouco mais desafiadora (ainda não muito difícil), é a comutação de devicemapper para direct-lvm, em vez de loop-lvm (o que é agora). Documentos atômicos do RHEL mencionam docker-storage-setup , o que deve ajudar / automatizar a configuração do direct-lvm, mas tenho experiência limitada lá

    
por 11.08.2016 / 15:09

Tags