
Minha história
Era uma vez eu estava ligandoDockerde uma fila PHP laravel para processar milhares de arquivos de mídia. Meu código criaria um novo contêiner para cada tarefa que eu desejasse concluir (por exemplo, "processar", "pesquisar", "fatiar" etc.). Então fui para a cama e o desastre aconteceu. Acordei com um arquivo de log de 1 TB e algumas centenas de milhares de contêineres em vários estados.
Docker não funciona mais. Tipo, quando eu digito docker version
(ou docker anything
nesse caso), ele apenas fica lá e fica olhando. Não consigo remover os contêineres por meio do padrão docker rm $(docker ps -a -q)
porque o Docker ficou muito, muito deprimido.
Aqui estão informações relevantes sobre como estou chamando o daemon:
$> sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock
INFO[0000] [graphdriver] using prior storage driver "aufs"
(Meanwhile in another terminal)
$> docker version
(insert infinite darkness here)
Minhas perguntas
Como posso remover contêineres do docker se o daemon do docker não estiver respondendo?
Estou usando o Docker como um executável glorificado sendo chamado a partir do código usando sua API. Que etapas extras preciso que meu código execute para limpar no futuro?
Responder1
Bem, eu fiz algumas pesquisas.
Como posso remover contêineres do docker se o daemon do docker não estiver respondendo?
No Ubuntu, os contêineres são armazenados no /var/lib/docker/containers
diretório. Exclua o conteúdo desse diretório e as coisas ficarão muito melhores.
Além disso, para quem estiver curioso, havia cerca de 250 mil contêineres que tiveram que ser removidos. Dado o número de arquivos que tive que acompanharls /var/lib/docker/containers | xargs -n200 rm -rf
Estou usando o Docker como um executável glorificado sendo chamado a partir do código usando sua API. Que etapas extras preciso que meu código execute para limpar no futuro?
Se o contêiner não for usado novamente, você deverá “removê-lo” oficialmente depois de terminar. Na linha de comando, isso seria feito usando docker rm $(containername)
e no código dependerá completamente de como o docker está sendo acessado.