Я пытаюсь создать кластер redis-sentinel с помощью docker-compose в моей системе и сделать его видимым для хост-машины (это попытка реплицировать приложение, которое будет использовать redis-sentinel локально).
Я создал следующий docker-compose.yaml
файл для настройки как часового, так и самого redis
version: '2'
networks:
app-tier:
driver: bridge
services:
redis-sentinel:
image: s7anley/redis-sentinel-docker
environment:
- ANNOUNCE_IP=127.0.0.1
- ANNOUNCE_PORT=26379
- MASTER_NAME=mymaster
- MASTER=redis
networks:
- app-tier
ports:
- '26379:26379'
redis:
image: bitnami/redis:latest
environment:
- ALLOW_EMPTY_PASSWORD=yes
networks:
- app-tier
ports:
- '6379:6379'
volumes:
redis_data:
driver: local
Часовой управляет запуском и правильно находит мастер redis, однако, похоже, он не уважаетопция announce-ip
, фактически, кажется, полностью игнорирует ее.
т.е. когда я запускаю redis-cli
на моей хост-машине и спрашиваю адрес мастера, я получаю это
redis-cli -p 26379
127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "192.168.32.2"
2) "6379"
127.0.0.1:26379>
Сообщаемый IP-адрес должен быть 127.0.0.1
, а не 192.168.32.2
(который является внутренним IP-адресом, используемым докером в сети)
Это файл sentinel.conf
, который используется в образе докера
port 26379
sentinel announce-ip 127.0.0.1
sentinel announce-port 26379
sentinel monitor mymaster redis 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster
А вот так выглядит конфигурационный файл после того, как redis-sentinel перезаписывает его после запуска
port 26379
sentinel myid 4e7786e55f2b4ec31bdd36c1c3af6e2d3f2569e3
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.32.2 6379 2
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
# Generated by CONFIG REWRITE
dir "/data"
sentinel announce-ip "127.0.0.1"
sentinel announce-port 26379
Кто-нибудь знает, что может быть причиной этого?