Estou tentando configurar o Docker Machine com o Docker Compose.
Cenário 1 (sem Docker Machine)
Se eu executar docker-compose up -d
sem 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:
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:
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 .
fonte
tmpfs
nã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.docker rmi $(docker images -f dangling=true -q)
edocker volume rm $(docker volume ls -f dangling=true -q)
Respostas:
Como dito acima, o
tmpfs
não tem nada a ver com--virtualbox-disk-size
. Parece que o boot2docker montatmpfs
na memória, então você precisa dedicar mais memória ao seu virtualbox vm. Você pode fazer isso especificando o--virtualbox-memory
parâmetroPadrões:
Com
--virtualbox-memory
definido como8096
fonte
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:
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 rmi $(docker images | grep '^<none>' | awk '{print $3}')
. A remoção de contêineres parados pode ser feitadocker rm $(docker ps -qa --no-trunc --filter "status=exited")
conforme descrito aqui: stackoverflow.com/a/32723127/619659 .docker images | grep "^<none>" | xargs docker rmi
.docker volume prune
Se você estiver usando o Docker Community Edition:
Se você estiver usando o boot2docker (docker-machine), limpe os volumes que são órfãos:
Limpar imagens não utilizadas:
fonte
docker system prune
me ajudoudocker system prune
ftwdocker volume prune
para apenas volumes, a remoção do sistema não limpará os volumes pendentes.docker rmi $(docker images -q)
. Adicione,--force
se necessário, quando ele pular várias camadas incluídas em vários contêineres.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:
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.
então você pode ir para a caixa virtual e ver o espaço boot2docker com o comando "df -h"
fonte
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)
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.
fonte
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
fonte