2016-10-07 3 views
4

Что я хочу сделать, это использовать dump.rdb, который я взял с производственного сервера, и использовать его в моей среде разработки, которая определяется очень простым составом файл.Восстановление redis на docker из dump.rdb

Для простоты предположим, что мое приложение такое же, как это compose example from the docker docs для Redis и колбы, так докер-compose.yml выглядит следующим образом:

version: '2' 
services: 
    web: 
    build: . 
    ports: 
     - "5000:5000" 
    volumes: 
     - .:/code 
    depends_on: 
     - redis 
    redis: 
    image: redis 

Это сохраняется Redis данные между перезагрузками, но вы просто не можете обращайтесь к файлам redis, поскольку в файле docker-compose.yml нет тома, установленного для redis. Итак, я изменяю свой файл компоновки для монтирования тома для redis, и я также хочу заставить redis сохранять данные, а official redis image docs сказать, что это происходит, если я использую «appendonly».

redis: 
    image: redis 
    command: redis-server --appendonly yes 
    volumes: 
    - ./redis:/data 

Если я делаю это, мои данные сохраняются, так как они находились в исходном примере, и теперь я могу видеть dump.rdb и и appendonly.aof в пути/Redis. Проблема в том, что если я хочу восстановить из dump.rdb, мне нужно отключить appendonly (например, см. Раздел «Как сделать резервную копию и восстановление вашего-redis-data-on-ubuntu-14»). -04), и без append-only я не вижу, как получить файл компоновки для записи в том.

Как я могу создать докеры, которые будут сохраняться в томе, где я могу переключить файлы dump.rdb, и, следовательно, вставить производственный снимок в мою среду разработки?

Update Следующие Compose работает, но будьте терпеливы при тестировании, как создание dump.rdb не мгновенный (следовательно, он, казалось, что это не удалось). Кроме того, Redis официальный документ изображения, означает, что вы должны использовать appendonly, когда вы не:

redis: 
    image: redis 
    volumes: 
    - ./redis:/data 

ответ

1

appendonly часть просто чтобы убедиться, что вы не потеряете данные, но так как у вас уже есть дамп. rdb с вашего сервера, вам не нужно беспокоиться об этом: вы можете либо удалить флаг append only, либо полностью удалить команду, так как она вернется к стандарту по умолчанию, который является просто «redis-server».

У меня есть аналогичная настройка here, и он пишет/загружает файлы dump.rdb в порядке.

+0

Thanks @Chris - сравнивая составляющие файлы, одно отличие заключается в том, что вы создаете собственное изображение redis 'build redis' (c.f.' image redis'), поэтому я подумал, что это может быть так. Я попытался использовать ваш redis Dockerfile, чтобы убедиться, что это так, и я все еще не получал ожидаемого результата. Поэтому я вернулся к стандартным изображениям, удалив «команду» и имея там том. Кажется, что это исправляет некоторое время - иногда мне приходится перезапускать контейнер. Проблема в том, что создание файла 'dump.rdb' не запускалось, но закрытие контейнера вызывает его. –

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