Docker Machine: Não há espaço no dispositivo


126

Estou tentando configurar o Docker Machine com o Docker Compose.

Cenário 1 (sem Docker Machine)
Se eu executar docker-compose up -dsem o Docker Machine, ele criará meus três contêineres vinculados conforme pretendido (nginx + mongodb + nodejs).

Cenário 2 (com Docker Machine)
Em seguida, crio uma VM usando o Docker Machine e digo ao Docker para conversar com esse computador eval $(docker-machine env streambacker-dev).

Neste ponto, se eu ssh na minha máquina docker e executar df -h, recebo:

máquina de encaixe df -h

Se eu executar docker-compose up -d, recebo o erro "sem espaço restante no dispositivo" durante o download do último contêiner.

"tmpfs" parece estar realmente um pouco cheio depois disso:

máquina de encaixe df -h

Marcar a opção --virtualbox-disk-size mostra que o padrão é 20000 MB, o que acho que é o que podemos ver como "/ dev / sda1" nas duas imagens. Então, por que os contêineres estão preenchendo "tmpfs" ne o que exatamente são "tmpfs"? É um diretório de download temporário? Como posso criar mais espaço para meus contêineres?

Obrigado!

Para obter informações, estou usando o Docker Machine 0.4.0-rc2 e o Docker Compose 1.3.2 .


4
O tmpfsnão tem nada a ver com --virtualbox-disk-size. É um sistema de arquivos (como um disco RAM) montado na memória e nada acessando seu disco.
0x7d7b

Obrigado @ h3nrik por essa informação.
Marc Perrin-Pelletier

2
verifique com os itens pendentes da janela de encaixe, como imagens pendentes, volumes pendentes e exclua-os. docker rmi $(docker images -f dangling=true -q)edocker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

Respostas:


87

Como dito acima, o tmpfsnão tem nada a ver com --virtualbox-disk-size. Parece que o boot2docker monta tmpfsna memória, então você precisa dedicar mais memória ao seu virtualbox vm. Você pode fazer isso especificando o --virtualbox-memoryparâmetro

   --virtualbox-memory "1024"
Size of memory for host in MB [$VIRTUALBOX_MEMORY_SIZE]

Padrões:

$ docker-machine create --driver virtualbox testA
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testA
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@testA:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   896.6M    112.7M    783.9M  13% /

Com --virtualbox-memorydefinido como8096

$ docker-machine create --driver virtualbox --virtualbox-memory 8096 testB
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testB
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@testB:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                     6.9G    112.4M      6.8G   2% /

14
Não é muito intuitivo, mas funcionou. Que diabos, Docker?
BastiBen

1
Na verdade, não é intuitivo! No entanto, este parece ser o problema com isso e o corrigiu para mim. Então, +1.
precisa

Corrigido o problema para mim também, não entendo como, mas obrigado!
Bendihossan

Alguma maneira de aumentar o tamanho padrão para que eu não precise especificá-lo manualmente toda vez?
CGFoX 7/08/19

124

Eu tive o mesmo erro ([ERROR] InnoDB: Error number 28 means 'No space left on device' ) 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:

$ docker volume rm $(docker volume ls -qf dangling=true)

Comandos adicionais:

Listar volumes pendentes:

$ docker volume ls -qf dangling=true

Listar todos os volumes:

$ docker volume ls

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

docker rmi $(docker images | grep "^<none>" | awk '{print $3}')

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 imagens

você pode editar o script acima para removê-los ou removê-los manualmente com

docker rmi {image-name}


3
No Mac eu tinha que usar aspas simples ( ') em torno dos valores dos argumentos: docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). A remoção de contêineres parados pode ser feita docker rm $(docker ps -qa --no-trunc --filter "status=exited")conforme descrito aqui: stackoverflow.com/a/32723127/619659 .
Webdevotion 25/05

1
Eu tinha tantas imagens não utilizadas que cheguei ao limite de caracteres da minha concha. Foi por isso que fiz docker images | grep "^<none>" | xargs docker rmi.
Matthias Braun

1
Remover imagens desnecessárias me ajudou.
akauppi

docker volume prune
usar o seguinte código

.. ver a minha descrição passo-a-passo para redimensionar / var / lib / janela de encaixe usando resize2fs em outro segmento: stackoverflow.com/questions/32485723/...
Alex

65

Se você estiver usando o Docker Community Edition:

 docker system prune
 docker volume prune  # as suggested by @justin-m-chase since system prune does not clean volumes.

Se você estiver usando o boot2docker (docker-machine), limpe os volumes que são órfãos:

 docker volume rm $(docker volume ls -qf dangling=true)

Limpar imagens não utilizadas:

 docker rmi $(docker images -q -f "dangling=true")

6
docker system pruneme ajudou
Maxim Yefremov

2
docker system pruneftw
Michael Guild

1
docker volume prunepara apenas volumes, a remoção do sistema não limpará os volumes pendentes.
usar o seguinte código

Quando o acima não limpar-lhe espaço suficiente, aqui é a opção nuclear: docker rmi $(docker images -q). Adicione, --forcese necessário, quando ele pular várias camadas incluídas em vários contêineres.
EmptyArsenal

14

A. REMOVA IMAGENS NÃO UTILIZADAS

Usando os comandos docker rm ou docker rmi, você pode remover as imagens desnecessárias. Na verdade, existe uma imagem que ajude nessa tarefa (martin / docker-cleanup-volumes). A base é iniciar a seleção da sua lista de imagens e contêineres:

janela de encaixe ps -a -s

B. MODIFICAR O DESCRITOR JSON DA DOCKER

é mencionado em alguns fóruns. A idéia é incrementar o descritor localizado em ~ / .docker / machine / machines / default / config.json. O parâmetro parece ser DiskSize, mas não sei se funciona em outros sistemas operacionais (não no Windows).

C. TAMANHO DO LINUX:

No sistema operacional Windows, a máquina docker ou o boot2docker é de fato um virtualbox vm, você pode seguir o procedimento para redimensionar o disco. Tome cuidado para fazer backup dos arquivos. O procedimento geral é fazer um redimensionamento no virtualbox e, em seguida, usar um utilitário chamado gpartd para modificar o espaço percebido pelo linux em suas partições. Existem alguns links para executar este procedimento mencionado abaixo:

D. RECREA A DOCKER-MACHINE / BOOT2DOCKER

A ideia é recriar a máquina de encaixe padrão. Os seguintes comandos podem ilustrar você. Observe que, ao recriar o boot2docker, você perderá as imagens anteriores do docker baixadas.

docker-machine rm padrão

docker-machine create --driver virtualbox --virtualbox-disk-size "100100" padrão

padrão docker-machine env

então você pode ir para a caixa virtual e ver o espaço boot2docker com o comando "df -h"


Obrigado. Eu estava trabalhando no Windows. Consegui recriar a máquina de encaixe.
KinoP

Ajudei o D: (recriando a máquina de encaixe)
StanislavL

Obrigado, recriar a docker-machine funcionou para mim (estou no Windows)
Lucha Laura Hardie

Eu sinto tanto amor!
eduyayo 03/02

2

No docker osx /, eu pude pressionar um botão [ Move Disk Image ] e ele moveu com êxito o Docker.qcow2 (provavelmente contendo contêineres / imagens)

insira a descrição da imagem aqui Inicialmente - quando as máquinas foram iniciadas - eu ainda estava recebendo um erro de falta de espaço no dispositivo, mas ele foi resolvido logo depois.


0

Corri para esse problema e não podia adicionar espaço adicional com a interface do usuário do docker para mac, instalei o docker com homebrew e executei o seguinte comando ao criar minha máquina:

docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-disk-size "40000" default

isso adiciona o dobro do espaço para a memória e o tamanho do disco à caixa virtual que eu tinha antes e você pode adicionar aqui o tamanho das configurações necessárias, como achar melhor

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.