Почему папка тома пуста после повторного сохранения? - PullRequest
0 голосов
/ 26 ноября 2018

Код

Я пытаюсь запустить службу redis, определенную внутри docker-compose.yml следующим образом:

version: '3'
services:
  redis:
    image: "redis:5-alpine"
    volumes:
      - ./redis-vol:/home/data 
  app:
    build: .
    ports:
      - 8080:8080
    volumes:
      - .:/home/app/

Это Dockerfile:

FROM python:2.7-alpine3.8
WORKDIR /home/app
COPY ./requirements.txt .
RUN apk add python2-dev build-base linux-headers pcre-dev && \
    pip install -r requirements.txt
# Source files
COPY ./api.py . 
COPY ./conf.ini .
CMD ["uwsgi", "--ini", "conf.ini"]

Приложение состоит из этого фрагмента с интерфейсом uwsgi на порту 8080

import uwsgi
import redis
r = redis.Redis('redis')
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    r.append('hello', 'world!')
    r.save()
    return [b"Hello World"]

И это файл conf.ini:

[uwsgi]
http = :8080 
wsgi-file = api.py 
master = true
process = 2
enable-threads = true
uid = 1001
gid = 1001

Служба приложениядолжен сохранять пару key:value через redis каждый раз, когда получает запрос на http://localhost:8080.При успешном запросе процесс docker-compose возвращает следующий журнал:

redis_1_bdf757fbb2bf | 1:M 26 Nov 2018 15:38:20.399 * DB saved on disk
app_1_5f729e6bcd36   | [pid: 17|app: 0|req: 1/1] 172.21.0.1 () {38 vars in 690 bytes} [Mon Nov 26 15:38:20 2018] GET / => generated 11 bytes in 8 msecs (HTTP/1.1 200) 1 headers in 44 bytes (1 switches on core 0)
redis_1_bdf757fbb2bf | 1:M 26 Nov 2018 15:38:20.998 * DB saved on disk
app_1_5f729e6bcd36   | [pid: 17|app: 0|req: 2/2] 172.21.0.1 () {40 vars in 691 bytes} [Mon Nov 26 15:38:20 2018] GET /favicon.ico => generated 11 bytes in 4 msecs (HTTP/1.1 200) 1 headers in 44 bytes (1 switches on core 0)

Проблема

Несмотря на журнал DB saved on disk, папка redis_vol пуста и файл dump.rdbфайл, похоже, больше нигде не сохраняется.

Что я делаю не так?Я также попытался использовать redis:alpine в качестве образа, но у меня при запуске возникает следующая ошибка:

redis_1_bdf757fbb2bf | 1:M 26 Nov 14:57:27.003 # Can't handle RDB format version 9
redis_1_bdf757fbb2bf | 1:M 26 Nov 14:57:27.003 # Fatal error loading the DB: Invalid argument. Exiting.

И я также попытался отобразить dump.rdb в службе redis следующим образом:

  redis:
    image: "redis:5-alpine"
    volumes:
      - ./redis-vol/dump.rdb:/home/data/dump.rdb

но докер создает папку с именем dump.rdb/ вместо читаемого файла.

1 Ответ

0 голосов
/ 26 ноября 2018

Согласно документации Redis на странице DockerHub

Если постоянство включено, данные сохраняются в VOLUME / data

.вы используете неправильный путь к объему.Yout должен использовать /data вместо

volumes:
    - ./redis-vol:/data 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...