Сегодня я столкнулся с этой проблемой, пытаясь настроить ее для тестового экземпляра.Мой исходный файл композиции был основан на https://blog.alexseifert.com/2016/11/14/using-redis-sentinel-with-docker-compose/ с модификациями, чтобы удовлетворить мои потребности.Мне удалось найти обходной путь, 1) привязав порты к моей хост-машине, 2) установив флаг depen_on в docker-compose, и 3) установив мой sentinel.conf, чтобы он указывал на имя хоста, на котором работал мой мастер: https://docs.docker.com/compose/startup-order/
Немного сложно объяснить, но я постараюсь изо всех сил: Ваш мастер / реплика будет выглядеть примерно так в docker-compose:
redis-master:
image: redis:5.0.4-alpine
volumes:
- <mounted-data-directory>
- "<local-master-config-directory>/redis.conf:/usr/local/etc/redis/redis.conf"
ports:
- "6379:6379"
command:
- redis-server
- /usr/local/etc/redis/redis.conf
redis-replica:
image: redis:5.0.4-alpine
links:
- redis-master
volumes:
- <mounted-data-directory>
- "<local-replica-config-directory>:/usr/local/etc/redis/redis.conf"
ports:
- "6380:6380"
depends_on:
- redis-master
command:
- redis-server
- /usr/local/etc/redis/redis.conf
- --slaveof redis-master 6379
Для моих стражей ядал каждый Dockerfile и sentinel.conf (каждый из которых имеет разные порты): Dockerfile:
FROM redis:5.0.4-alpine
RUN mkdir -p /redis
WORKDIR /redis
COPY sentinel.conf .
RUN chown redis:redis /redis/*
ENTRYPOINT ["redis-server", "/redis/sentinel.conf", "--sentinel"]
sentinel.conf
port 26379
dir /tmp
bind 0.0.0.0
sentinel monitor mymaster <hostname> 6379 2
sentinel down-after-milliseconds mymaster 1000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
Стоит отметить, что я попытался сделать это с 127.0.0.1 и localhost, и я не думаю, что либо работал, поэтому у меня было установлено имя хоста на машине, на которой я запускал это.Я как бы пробовал все и вся в тот момент.
У каждого стража (у меня их было три) была отдельная запись, ссылающаяся на их контексты сборки и сопоставляющая порт в sentinel.conf с локальным портом.Так что в docker-compose мои стражи выглядели так:
# Instance 1
redis-sentinel:
build:
context: <path-to-context>
links:
- redis-master
ports:
- "26379:26379"
depends_on:
- redis-replica
То, что я делал, было определенно хаком, и я бы не стал делать это на производстве.Я почти уверен, что есть гораздо лучшее сетевое решение для докера, я просто не хотел заходить слишком далеко в кроличью нору, чтобы проверить, что мне нужно.Надеюсь, это поможет.