Por que o docker-machine limpa os dados na reinicialização?

8

Estou usando o Docker Toolbox no OSX.

Eu criei um contêiner de volume de dados para armazenar dados persistentes: link .

Eu verifiquei que esses dados estão realmente armazenados na VM boot2docker (criada pelo docker-machine) e não no contêiner, para que ela persista. No entanto, "reinício da máquina de encaixe" limpa esses dados personalizados na VM.

Não consigo encontrar documentação sobre o que está acontecendo. Eu encontrei um post no fórum mencionando que os dados em / var / lib / docker serão preservados, mas não encontrei nenhum documento oficial afirmando isso e também parece estranho, considerando que o guia de armazenamento persistente acima não usa esse caminho ou menciona que seus dados serão excluídos.

Isso é esperado e, se houver, há alguma documentação oficial sobre o caminho correto para armazenar dados persistentes?

Editar: Adicionando exemplo de senario com falha

$ docker-machine ssh alt
docker@alt:~$ docker run -v /data:/var/lib/mysql --name mydata busybox sh -c "echo 'hello' > /var/lib/mysql/hello"
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
hello
docker@alt:~$ exit
$ docker-machine restart alt
Starting VM...
$ docker-machine ssh alt
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
cat: can't open '/var/lib/mysql/hello': No such file or directory
    
por Gerry 14.09.2015 / 05:22

3 respostas

8

Isso definitivamente deve funcionar:

$ docker-machine ssh default
docker@default:~$ docker run -v /data --name mydata busybox true
docker@default:~$ docker run --volumes-from mydata busybox sh -c "echo hello >/data/hello"
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello
docker@default:~$ exit
$ docker-machine restart default
Starting VM...
$ docker-machine ssh default
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello

Você pode elaborar mais sobre as etapas para reproduzir seu problema?

O boot2docker tem um sistema de arquivos somente para leitura (será apagado na reinicialização), com exceção de:

  1. Contêineres e seus dados (volumes) - isso é o que você lê sobre /var/lib/docker
  2. Imagens do Docker
  3. Configuração do Docker (por exemplo, /var/lib/boot2docker/profile , onde os sinalizadores do daemon podem ser ajustados)
por 18.09.2015 / 20:32
6

Eu não uso o boot2docker, mas se / data for apagado na reinicialização, é onde o seu volume está sendo armazenado ( docker run -v /data:/var/lib/mysql ), então ele será perdido.

O que você está fazendo também está combinando dois padrões diferentes para lidar com a persistência de volume. Para obter persistência, os contêineres podem montar volumes a partir de um local especificado no sistema host (que se presume ser persistente) ou podem ser associados a um contêiner de dados e montados com --volumes-from . Parece que a abordagem do sistema de arquivos do host não é apropriada para o boot2docker, e você deve usar o padrão de volume de dados (apenas).

Presumivelmente, você deve criar seu contêiner de dados com -v /var/lib/mysql , em vez de -v /data:/var/lib/mysql .

    
por 19.09.2015 / 16:26
0

Note que estou usando o docker para mac beta que está usando o xhyve vm.

O conteúdo de / var / lib / boot2docker será mantido entre as reinicializações da máquina. Então, se você quiser que certos arquivos estejam disponíveis no seu vm, coloque-os nesse diretório.

Se você quiser que eles estejam acessíveis em um local diferente para a execução de contêineres docker, adicione o seguinte a / var / lib / boot2docker / profile:

mkdir -p /desired/path
ln -s /var/lib/boot2docker/your.file /desire/path/your.file

Se você quiser adicionar outra configuração aos arquivos do sistema que persistirão entre as reinicializações da VM, como valores extras no arquivo de hosts, você poderá adicionar um comando como o abaixo em / var / lib / boot2docker / profile:

echo '127.0.0.1 your.domain.com' >> /etc/hosts

Espero que ajude

    
por 29.07.2016 / 12:57