2014-12-24 4 views
2

У меня есть это приложение, пытающееся организовать с помощью docker + fig, который отлично работает в первый день попытки. Он использует контейнер данных, в котором я хочу сохранить файлы базы данных и контейнеры redis + mysql, используемые приложением.docker mysql постоянное хранилище

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

Пока я изучаю фигу, мне нужно было сделать fig rm --force mysql, который удалил мой контейнер mysql. Я сделал это без страха, зная, что мои данные безопасны в контейнере данных. Запуск ls на моем хосте показывает, что файлы mysql остаются неповрежденными.

Проблема возникает, когда я снова запускаю fig up, который снова создает контейнер mysql. Несмотря на то, что у меня одинаковые тома, и мои старые файлы mysql все еще присутствуют, этот новый контейнер создает новую базу данных, как если бы общий том был пустым. Это происходит только в том случае, если I rm контейнер, а не если я закрою рис и верну его.

Вот мой файл фига, если это поможет:

data: image: ubuntu:12.04 volumes: - /data/mysql:/var/lib/mysql redis: image: redis:latest mysql: image: mysql:latest ports: - 3306 environment: MYSQL_DATABASE: ***** MYSQL_ROOT_PASSWORD: ***** volumes_from: - data web: build: . dns: 8.8.8.8 command: python manage.py runserver 0.0.0.0:8000 environment: - DEBUG=True - PYTHONUNBUFFERED=1 volumes: - .:/code ports: - "8000:8000" links: - data - mysql - redis

Любые идеи, почему новый контейнер MySQL не будет использовать существующие файлы.?

ответ

0

Я не использовал fig, но буду изучать его, поскольку упрощенное синтаксис в вашем сообщении выглядит довольно здорово. Каждый день я провожу еще пару часов, расширяя свои знания о Docker и переписывая свой мозг относительно того, что возможно. Примерно через 3 недели я запускаю контейнер данных без состояния для своих экземпляров MySQL. Это отлично работает без проблем.

Если содержание внутри/var/lib/mysql не существует при запуске контейнера, то скрипт устанавливает необходимые файлы базы данных. Скрипт проверяет, существуют ли исходные файлы баз данных не только путь /var/lib/mysql.

if [[ ! -f $VOLUME_HOME/ibdata1 ]]; then 
    echo "=> An empty or uninitialized MySQL volume is detected in $VOLUME_HOME" 
    echo "=> Installing MySQL ..." 

else 
    echo "=> Using an existing volume of MySQL" 
fi 

Вот прямая link to a MySQL repo я продолжаю повышать

+0

Файлы существуют, когда загружается контейнер mysql, поскольку докеры монтируют том, в котором есть необходимые файлы. Я даже попытался убить все контейнеры, а затем снова выстрелить 'fig up', и он находит файлы. Только когда я использую контейнер mysql, он это делает. Я бы предположил ошибку разрешения, но я не могу найти ошибку, связанную с этим ... –

0

Это, кажется, ошибка, увидеть этот родственный вопрос, который содержит ссылки на соответствующие вопросы, инжир/докеров: https://stackoverflow.com/a/27562669/204706

Видимо ситуация улучшается с помощью докера 1.4.1, поэтому вы должны попробовать использовать эту версию, если вы еще этого не сделали.

+0

Переключился с фига на чистую бродягу из-за этой ошибки, которая делает всю установку очень ненадежной. Кстати, я использую 1.4.1. –

Смежные вопросы