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

Estou usando o Docker Toolbox no OSX.

Eu criei um contêiner de volume de dados para armazenar dados persistentes: https://docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container.

Verifiquei se esses dados estão realmente armazenados na VM boot2docker (criada por docker-machine) e não no contêiner, para que ele persista.No entanto, "Docker-Machine restart" limpa esses dados personalizados na vm.

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

Isso é esperado e, em caso afirmativo, há alguma documentação oficial no caminho correto para armazenar dados persistentes?


Editar: adicionando exemplo de falha do senario

$ docker-machine ssh altdocker@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"hellodocker@alt:~$ exit$ docker-machine restart altStarting VM...$ docker-machine ssh altdocker@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

Isso definitivamente deve funcionar:

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

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

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

  1. Containers e seus dados (volumes) - é sobre isso que você lê /var/lib/docker
  2. Docker imagens
  3. Configuração do Docker (por exemplo /var/lib/boot2docker/profile onde os sinalizadores daemon podem ser ajustados)

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

O que você está fazendo também é combinar dois padrões diferentes para lidar com a persistência do 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 host não é apropriada para boot2docker, e você deve usar o padrão de volume de dados (apenas).

Presumivelmente, você deve estar criando seu contêiner de dados com -v /var/lib/mysql, que -v /data:/var/lib/mysql.

Observe que estou usando o docker para Mac beta, que está usando a vm xhyve.

O conteúdo de /var/lib/boot2docker será persistido entre a máquina restarts.So se você quiser que certos arquivos estejam disponíveis em sua vm, coloque-os neste diretório.

Se você quiser que eles sejam acessíveis em um local diferente para executar contêineres docker, você pode adicionar o seguinte a/var/lib/boot2docker / profile:

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

Se você deseja adicionar outra configuração aos arquivos do sistema que persistirão entre as reinicializações da vm, como valores extras em seu arquivo hosts, você pode adicionar um comando como o abaixo para /var / lib / boot2docker / profile:

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

Espero que ajude