El uso de localhost en el contenedor docker no es válido, ya que localhost significa que el contenedor es su propio contenedor, por lo que si ejecuta redis-cli desde el contenedor web, redis-cli está tratando de encontrar redis en el contenedor web en lugar del contenedor redis.
Debe especificar el nombre del servicio de redis:docker (la red de docker-compose para ser más específicos) resolverá el nombre de su servicio en la IP del contenedor de redis, por lo que debe usar:
redis-cli -h redis ping
el resultado esperado es:
PONG
Editar:
Esa respuesta solo funcionará si ambos servicios usan el mismo modo de red, por lo que hay 2 formas:
- Agregar network_mode:host al servicio web y luego "localhost" para redis estará bien
- Elimine network_mode:host de redis y luego el dominio "redis" estará bien