Почему машина докера очищает данные по перезапуску?

Я использую Панель инструментов Докера на OSX.

Я создал контейнер объема данных для того, чтобы хранить персистентные данные: https://docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container.

Я проверил, что эти данные действительно хранятся на boot2docker VM (созданный машиной докера) а не на контейнере, так, чтобы это сохранилось. Однако "перезапуск машины докера" убирает эти пользовательские данные по vm.

Я не могу найти документацию относительно того, что происходит. Я нашел одно сообщение форума, упомянув, что данные в/var/lib/docker будут сохранены, но я не мог найти официальные документы, указывающие, что и это также кажется странным рассмотрением, что персистентное руководство устройства хранения данных выше не использует этот путь или даже упоминает, что Ваши данные будут удалены.

Это ожидается и раз так является там какой-либо официальной документацией относительно корректного пути, чтобы хранить персистентные данные?


Править: Добавление примера провального сценария

$ 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
9
задан 19 September 2015 в 15:19
3 ответа

Это определенно должно сработать:

$ 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

Можете ли вы подробнее рассказать о шагах по воспроизведению вашей проблемы?

boot2docker имеет файловую систему, доступную только для чтения (будет стерта при перезагрузке), за исключением:

  1. контейнеров и их данных (томов) - вот что вы читали о /var/lib/docker
  2. образах докера
  3. настройке докера (e.g. /var/lib/boot2docker/profile, где можно настроить флаги демона)
8
ответ дан 2 December 2019 в 22:27

Я не использую boot2docker, но если /data будет стерта при перезагрузке, то ваш том будет сохранен (docker запустит -v /data:/var/lib/mysql), поэтому он будет потерян.

Вы также комбинируете два различных шаблона для работы с персистентностью тома. Для получения персистентности контейнеры могут монтировать тома из определенного места в хост-системе (которое считается персистентным), или они могут быть связаны с контейнером данных и монтироваться с помощью -- томов-из. Похоже, что подход с файловой системой хоста не подходит для boot2docker, и вы должны использовать шаблон объёмов данных (только).

Предположительно, вы должны создать контейнер данных с помощью -v /var/lib/mysql, а не с помощью -v /data:/var/lib/mysql.

.
6
ответ дан 2 December 2019 в 22:27

Обратите внимание, что я использую docker для бета-версии mac, которая использует xhyve vm.

Содержимое / var / lib / boot2docker будет сохраняться между перезапусками компьютера. Поэтому, если вы хотите, чтобы определенные файлы были доступны на вашей виртуальной машине, поместите их в этот каталог.

Если вы хотите, чтобы они были доступны в другом месте для запуска контейнеров докеров, вы можете добавить следующее в / var / lib / boot2docker / profile:

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

Если вы хотите добавить другую конфигурацию к системным файлам, которые будут сохраняться между перезапусками vm, например дополнительные значения в вашем файле hosts, вы можете добавить команду, подобную приведенной ниже, в / var / lib / boot2docker / profile:

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

Надеюсь, это поможет

0
ответ дан 2 December 2019 в 22:27

Теги

Похожие вопросы