Erros ao configurar um serviço são um processo natural que todo engenheiro enfrenta em sua rotina de trabalho. Um deles é o erro do Docker: sem espaço no dispositivo, um erro que pode ser muito confuso, pois atualmente, no Linux, o espaço é dividido pelo sistema de arquivos de forma bastante flexível e é bem possível ficar sem espaço ou sem cota.
Como resolver um erro do Docker?
Esse problema tem duas causas principais, que indicam que:o espaço na partição de disco no caminho /var/lib/docker está cheio e requer mais espaço. Esse problema ocorre devido à grande quantidade de espaço ocupado pelos objetos do Docker, assim como pelo repositório local.
O espaço da cota do Docker se esgotou - esta também é uma das razões mais comuns quando a configuração especifica o limite de memória que o Docker pode usar. Esse recurso é útil para evitar o preenchimento excessivo do espaço do disco.
Para verificar se você tem espaço em disco suficiente ou insuficiente, use o comando que exibirá uma lista dos sistemas de arquivos e o espaço que ocupam:
df -H
Observe que a pasta /var/lib/docker pode estar localizada tanto na partição raiz / disco lógico quanto separadamente em /var. Neste caso, a pasta de destino está localizada na partição lógica /dev/vda2. Se o tamanho do seu espaço em disco não permitir carregar a imagem ou armazenar dados, você deve liberar espaço de arquivos desnecessários ou aumentar o disco.
Limpando arquivos do Docker
Se você não tiver os projetos necessários no Docker, pode limpar completamente o sistema com o comando:
docker system prune -af
O Docker fará uma varredura no repositório local, repositórios, contêineres e os removerá, mas antes de fazer isso, certifique-se de que não há contêineres em execução com o comando:
docker stop $(docker ps -q)
Para excluir arquivos de forma específica, use subcomandos, por exemplo, a limpeza de imagens no repositório local será feita com o comando:
docker image remove $(docker image ls -q)
Para excluir outros objetos, use subcomandos semelhantes: volume, container, network, etc. Se precisar excluir um arquivo específico, primeiro navegue pela lista e exclua o necessário:
docker image ls
docker image remove [container-name]
Após verificar novamente o espaço disponível no disco com o comando df -H, caso ainda não haja espaço suficiente, siga para o próximo ponto.
Extensão de Disco
Se você não tiver recursos suficientes, pode executar ações em servidores cloud poderosos. O Serverspace fornece servidores VPS isolados para uso comum e virtualizado.
Aumente o espaço em disco do dispositivo expandindo o armazenamento virtual do hipervisor ou selecione um disco diferente para a máquina. O espaço será aumentado, no entanto, deve ser alocado aos volumes lógicos e ao sistema de arquivos.
Para ampliar uma partição lógica, vamos encontrar uma lista desses volumes, geralmente eles estão mapeados para diretórios na árvore do Linux:
df -H
Neste caso, é /dev/vda2. Usamos uma utilidade pré-preparada para alterar a tabela de partição do disco. Observe que você precisa especificar sua partição em vez de /dev/vda2:
apt update && apt install parted && parted /dev/vda2
O comando print listará as partições lógicas atuais, memorize o número da sua partição e insira o comando:
resizepart [número-da-partição]
Insira o novo tamanho do disco, note que não é o quanto o espaço aumentará, mas o novo valor! Por exemplo, 40GB.
Em seguida, vamos aumentar o tamanho do sistema de arquivos através de uma utilidade semelhante em um único comando!
resize2fs
Por padrão, todo o espaço livre da partição lógica será ocupado pelo sistema de arquivos. Após isso, você pode verificar o espaço liberado com uma utilidade já conhecida:
df -H
Mas e se houver espaço suficiente para o contêiner Docker e o erro for o mesmo? Muito provavelmente é a cota alocada.
Aumentar a cota do Docker
Uma solução em poucas linhas que permite substituir o valor das variáveis e especificar mais espaço para o Docker. Para especificar explicitamente os recursos, precisamos reiniciar os contêineres com os novos parâmetros. Vamos parar todas as tarefas atuais:
docker stop $(docker ls -q)
Depois disso, vamos excluir os contêineres com o comando:
docker container prune
Defina os novos parâmetros por meio de opções. Observe que você deve ter cuidado ao escolher os valores para os contêineres, pois eles podem consumir recursos do sistema desnecessariamente!
docker run -d --name my_container -m 512m --memory-swap 1g --cpus=‘2’ nginx
A opção -m especifica um limite de uso de RAM de 512MB, --memory-swap 1GB de memória virtual e 2 núcleos de CPU. Aumentando os valores em relação aos padrões, o problema será resolvido!