¡ADVERTENCIA! ¡Sentinel no pudo guardar la nueva configuración en el disco!: ¡Dispositivo o recurso ocupado!
Estoy tratando de configurar un maestro, un esclavo y un sentinela en Docker, para eso escribí este archivo docker-compose.
version: '3'
services:
redis-master:
container_name: "redis-master"
image: redis
ports:
- "6379:6379"
command: "redis-server /etc/redis.conf"
volumes:
- "./data/master:/data/"
- "./master.conf:/etc/redis.conf"
redis-slave:
container_name: "redis-slave"
image: redis
ports:
- "6380:6379"
command: "redis-server /etc/redis.conf"
volumes:
- "./data/slave:/data/"
- "./slave.conf:/etc/redis.conf"
depends_on:
- redis-master
redis-sentinel:
container_name: 'redis-sentinel'
image: redis
ports:
- "26379:26379"
command: >
bash -c "chmod 777 /etc/sentinel.conf &&
redis-server /etc/sentinel.conf --sentinel"
volumes:
- "./sentinel.conf:/etc/sentinel.conf"
depends_on:
- redis-master
- redis-slave
Pero cuando intento construirlo usando sudo docker-compose up --build --force
, todos los servicios se ejecutan correctamente excepto redis-sentinel. Obtengo este error en los registros:
redis-sentinel | 1:X 16 Dec 2021 19:15:21.486 # +sdown master mymaster 172.23.0.2 6379
redis-sentinel | 1:X 16 Dec 2021 19:15:21.486 # +odown master mymaster 172.23.0.2 6379 #quorum 1/1
redis-sentinel | 1:X 16 Dec 2021 19:15:21.486 # +new-epoch 8
redis-sentinel | 1:X 16 Dec 2021 19:15:21.487 # +try-failover master mymaster 172.23.0.2 6379
redis-sentinel | 1:X 16 Dec 2021 19:15:22.955 # Could not rename tmp config file (Device or resource busy)
redis-sentinel | 1:X 16 Dec 2021 19:15:22.955 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy
Entiendo que esto se debe a algún problema de permisos de archivo y tengo que hacer que el sentinel.conf sea ejecutable, pero no puedo pensar en ninguna posible solución en Docker.
davy.ai
Según los registros de errores, parece que el problema está relacionado con los permisos del archivo sentinel.conf. El mensaje de error indica que Sentinel no pudo guardar la nueva configuración en disco porque el archivo está ocupado.
Para resolver este problema, puedes intentar las siguientes soluciones:
Puedes agregar este comando a tu Dockerfile o a la sección de comandos del archivo docker-compose.
Agrega un retraso antes de iniciar el contenedor de Redis Sentinel para asegurarte de que los contenedores de Redis Master y Slave estén activos y en funcionamiento primero. Puedes hacer esto agregando un comando “sleep” a la sección de comandos del contenedor de Redis Sentinel. Por ejemplo:
Esto retrasará el inicio del contenedor de Redis Sentinel en 10 segundos, dándole tiempo suficiente para que los otros contenedores se inicien.
Utiliza un enfoque diferente para configurar Redis Sentinel, como utilizar un archivo de configuración dedicado para Sentinel en lugar de utilizar el mismo archivo que los contenedores de Redis Master y Slave. Esto puede ayudar a evitar conflictos y problemas de permisos. Por ejemplo, puedes crear un archivo sentinel.conf separado y montarlo en el contenedor de Redis Sentinel como un volumen.
En este caso, asegúrate de otorgar los permisos necesarios al archivo sentinel.conf antes de montarlo en el contenedor de Redis Sentinel.