Instalei o docker em uma máquina Debian 7 da seguinte maneira
$ echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
Depois disso, quando tentei criar uma imagem, ela falhou com o seguinte erro
time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device"
Aqui estão as informações do docker
Containers: 2
Images: 21
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 25
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-0.bpo.4-amd64
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 2
Total Memory: 15.7 GiB
WARNING: No memory limit support
WARNING: No swap limit support
Como posso aumentar a memória? Onde estão armazenadas as configurações do sistema?
Das sugestões de Kal:
Quando me livrei de todas as imagens e contêineres, ele liberou algum espaço e a construção da imagem demorou mais tempo antes de falhar com o mesmo erro. Portanto, a pergunta é: a qual espaço isso se refere e como eu o configuro?
df -ih
Respostas:
Eu tive o mesmo erro e resolvo-o desta maneira:
1 Exclua os volumes órfãos no Docker, você pode usar o comando de volume do docker interno. O comando interno também exclui qualquer diretório em / var / lib / docker / volumes que não seja um volume, portanto, certifique-se de não colocar nada lá que você deseja salvar.
Atenção, tenha muito cuidado com isso, se você tiver alguns dados que deseja manter
Limpar:
Comandos adicionais:
Listar volumes pendentes:
Listar todos os volumes:
2) Considere também remover todas as imagens não utilizadas.
Primeiro, livre-se das
<none>
imagens (algumas vezes elas são geradas durante a criação de uma imagem e, por qualquer motivo, a construção da imagem foi interrompida, elas permanecem lá).aqui está um bom script que eu uso para removê-los
Então, se você estiver usando o Docker Compose para criar imagens localmente para cada projeto. Você terá muitas imagens geralmente nomeadas como sua pasta (por exemplo, se a pasta do seu projeto chamada Olá, você encontrará o nome das imagens
Hello_blablabla
). considere também remover todas essas imagensvocê pode editar o script acima para removê-los ou removê-los manualmente com
docker rmi {image-name}
fonte
docker images -qf dangling=true
e, claro, removê-los comdocker rmi $(docker images -qf dangling=true)
.ATUALIZAÇÃO
Os comandos abaixo se tornaram hacks à medida que o Docker se torna mais desenvolvido. A melhor prática atual é
Isso removerá:
Como abaixo, isso é nuclear.
Para limpar seu sistema, primeiro remova os contêineres
depois remova as imagens
Naturalmente, isso é nuclear e removerá todos os contêineres e todas as imagens. Você pode removê-los um de cada vez via
docker rm #CONTAINER_ID#
edocker rmi #IMAGE_ID
.fonte
df -ih
. Para diagnosticar mais cirurgicamente, digitencdu
e pressione c para contagem de arquivos e C para classificar por contagem de arquivos para obter uma estimativa aproximada do que está usando todos os seus inodes. Se o problema for realmente o Docker, será imediatamente aparente pelos diretórios que usam mais inodes.docker system prune
Verifique se você tem espaço livre em / var, pois é nesse local que o Docker armazena os arquivos de imagem por padrão (em / var / lib / docker).
Primeiro limpe as coisas usando
docker ps -a
para listar todos os contêineres (incluindo os interrompidos) edocker rm
removê-los; usedocker images
para listar todas as imagens armazenadas edocker rmi
removê-las.Em seguida, altere o local de armazenamento com uma opção -g no daemon do docker ou editando
/etc/default/docker
e adicionando a-g
opção aDOCKER_OPTS
.-g
especifica o local do "Docker runtime", que é basicamente tudo o que o Docker cria ao criar imagens e executar contêineres. Escolha um local com bastante espaço, pois o espaço em disco usado tenderá a aumentar com o tempo. Se você editar/etc/default/docker
, será necessário reiniciar o daemon do docker para que a alteração entre em vigor.Agora você poderá criar uma nova imagem (ou extrair uma do Docker Hub) e verá vários arquivos sendo criados no diretório especificado com a opção -g.
fonte
docker ps -a
para listar todos os contêineres (incluindo os existentes) e depoisdocker rm
para removê-los. Usedocker images
para listar todas as imagens e depoisdocker rmi
removê-las. Espero que isso limpe tudo (ou quase tudo).Como já mencionado,
ajuda, mas com o Docker 17.06.1 e posterior sem remover volumes não utilizados. Desde o Docker 17.06.1, o comando a seguir também remove os volumes:
Na documentação do Docker: https://docs.docker.com/config/pruning/
Se você deseja remover volumes e manter imagens e contêineres:
fonte
docker volume prune
me ajudou hoje quando todas as outras soluções aqui pararam de funcionar.Se for apenas uma instalação de teste do Docker (ou seja, não produção) e você não se importar em fazer uma limpeza nuclear, você pode:
limpe todos os recipientes:
docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm
limpe todas as imagens:
docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f
Novamente, eu uso isso em minhas instâncias ec2 ao desenvolver o Docker, não em nenhum caminho sério de controle de qualidade ou produção. O melhor é que, se você possui seus arquivos do Docker, é fácil reconstruir e ou
docker pull
.fonte
docker images -a | sed '1 d' | awk '{print $3}' | xargs docker rmi -f
. A versão do OS X BSDxargs
suporta a-L
opção, diferente da versão do boot2docker.docker ps -a -q
etc., para evitar as manipulações de texto, ou seja,docker rm $(docker ps -a -q); docker rmi -f $(docker images -a -q)
deve fazer o truquepara remover todos os contêineres, volumes, redes e imagens não utilizados de uma só vez ( https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands ):
se não for suficiente, pode-se remover os contêineres em execução primeiro:
aumentar / var / lib / docker ou usar outro local com mais espaço também é uma boa alternativa para se livrar desse erro (consulte Como alterar o diretório de instalação da imagem do docker? )
fonte
docker system prune
não remove volumes.docker system prune -a -f --volumes
irá remover volumes.Docker para Mac
Então,
docker system prune
edocker system prune --volumes
sugerido em outras respostas liberava algum espaço a cada vez, mas eventualmente, toda vez que eu executava qualquer coisa, estava recebendo o erro.O que realmente corrigiu o problema raiz foi excluir o
Docker.raw
arquivo que o Docker for Mac usa para armazenamento e reiniciá-lo.Para encontrar esse arquivo, abra o Docker for Mac e vá para *
Nas versões mais recentes do Docker for Mac **, ele mostra o tamanho real desse arquivo no disco ali na interface do usuário, bem como o tamanho máximo alocado. Você provavelmente verá que é enorme. Por exemplo, na minha máquina, eram 41 GB !
Excluí
Docker.raw
, reiniciei o Docker for Mac e o arquivo foi criado automaticamente novamente e voltou a ter 0 GB .Tudo continuou funcionando como antes , embora, é claro, eu tivesse perdido meu cache do Docker. Como esperado, após executar alguns comandos do Docker, o arquivo começou a ser preenchido novamente com alguns GB de material, mas nem perto de 41 GB .
Atualizar
Alguns meses depois, eu
Docker.raw
voltei a um tamanho semelhante. Portanto, esse método funcionou, mas deve ser repetido a cada poucos meses. Para mim tudo bem.Uma observação sobre por que isso funciona - devo assumir que é um bug no Docker for Mac. Parece realmente que
docker system prune
/docker system prune --volumes
deve limpar completamente o conteúdo deste arquivo, mas parece que o arquivo acumula outras coisas que não podem ser excluídas por esses comandos. De qualquer forma, excluí-lo manualmente resolve o problema!fonte
O Docker deixa imagens pendentes ao redor que podem ocupar seu espaço. Para limpar após o Docker, execute o seguinte:
ou com versões mais antigas do Docker:
Isso removerá imagens penduradas e danificadas, o que, esperançosamente, libera espaço no dispositivo.
fonte
docker rmi $(docker images -f "dangling=true" -q)
fonte
você também pode usar:
ou apenas para volumes:
fonte
No meu caso, a instalação do ubuntu-server 18.04.1 [por algum motivo estranho] criou um volume lógico do LVM com apenas 4 GB de tamanho em vez de 750 GB. Portanto, ao puxar imagens, eu receberia esse erro "sem espaço restante no dispositivo". A correção é simples:
fonte
Eu também encontrei esse problema na máquina RHEL. Não encontrei nenhuma solução apt em lugar algum na comunidade stack-overflow e docker-hub. Se você estiver enfrentando esse problema mesmo depois do comando abaixo:
poda do sistema docker --todos
A solução que funcionou finalmente:
fonte
Limpe o Docker usando o seguinte comando:
fonte
Seus cgroups têm o
cpuset
controlador ativado. Este controlador é útil principalmente no ambiente NUMA, onde permite especificar com precisão qual banco de CPU / memória suas tarefas podem executar.Por padrão, o obrigatório
cpuset.mems
ecpuset.cpus
não está definido, o que significa que "não resta espaço" para a sua tarefa, daí o erro.A maneira mais fácil de corrigir isso é habilitar
cgroup.clone_children
1 no cgroup raiz. No seu caso, deve serBasicamente, ele instruirá o sistema a inicializar automaticamente o contêiner
cpuset.mems
e acpuset.cpus
partir de seu cgroup pai.fonte
echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
Se você estiver usando a imagem boot2docker através do Docker Toolkit, o problema decorre do fato de a máquina virtual boot2docker ficar sem espaço.
Quando você faz
docker import
ou adiciona uma nova imagem, a imagem é copiada para a/mnt/sda1
que pode ter ficado cheia.Uma maneira de verificar qual espaço você tem disponível na imagem é ssh na vm, executar
df -h
e verificar o espaço restante em / mnt / sda1O comando ssh é
docker-machine ssh default
Depois de ter certeza de que é realmente um problema de espaço, você pode limpar de acordo com as instruções em algumas das respostas desta pergunta ou optar por redimensionar a própria imagem do boot2docker, aumentando o espaço em
/mnt/sda1
Você pode seguir as instruções aqui para redimensionar a imagem https://gist.github.com/joost/a7cfa7b741d9d39c1307
fonte
Se você estiver usando o Docker Desktop, poderá aumentar o tamanho da imagem do Disco nas Configurações avançadas , acessando as Preferências do Docker .
Aqui está a captura de tela do macOS:
fonte
Pode ser devido ao espaço de armazenamento padrão definido para 40 GB (caminho padrão, / var / lib / docker)
você pode alterar o volume de armazenamento para apontar para um caminho diferente
DOCKER_STORAGE_OPTIONS = '- driver de armazenamento = sobreposição --graph = CUSTOM_PATH'
se você executar informações da janela de encaixe do comando (deve mostrar o driver de armazenamento como sobreposição)
fonte
Parece que existem algumas maneiras de isso ocorrer. O problema que tive foi que a imagem do disco do docker atingiu seu tamanho máximo (Docker Whale -> Preferences -> Disk se você deseja visualizar qual o tamanho do OSX).
Aumentei o limite e estava pronto. Tenho certeza de que limpar imagens não utilizadas também funcionaria.
fonte
Eu executo os comandos abaixo.
Não há necessidade de reconstruir as imagens posteriormente.
Eles removem contêineres / volumes pendentes / pendentes.
fonte
Para mim,
docker system prune
fiz o truque. Estou executando o Mac OS.fonte
docker volume ls
não retornava nada, portanto parecia que o armazenamento era usado principalmente por caches e imagens pendentes.Isso funcionou para mim
parece ser a melhor opção com a versão mais recente
fonte