Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.5K
Vistas
Conexión Docker Redis rechazada

Estoy tratando de acceder al servidor Redis a través del código y no se conecta. Pero si golpeo el contenedor de redis, puedo acceder a redis-cli.

docker-compose.yml se ve así

 version: '2' services: web: build: context: . dockerfile: Dockerfile_nginx ports: - "9000:80" environment: - NGINX_SERVERNAME=xxx.dev *.xxx.dev command: /bin/bash -c "envsubst '$$NGINX_SERVERNAME' < /var/www/site.template > /etc/nginx/conf.d/default.conf && dos2unix /var/www/provision/init_storage.sh && sh /var/www/provision/init_storage.sh && nginx -g 'daemon off;'" volumes: - .:/var/www links: - php networks: frontend php: build: context: . dockerfile: Dockerfile_php-fpm command: /bin/bash -c "composer install && php-fpm" volumes: - .:/var/www environment: - APP_ENV=local - APP_DEBUG=true networks: - frontend - backend links: - redis db: build: context: . dockerfile: Dockerfile_mariadb volumes: - ./initdb:/docker-entrypoint-initdb.d ports: - "3309:3306" environment: MYSQL_ROOT_PASSWORD: xxxx MYSQL_DATABASE: xxxx networks: - backend redis: build: context: . dockerfile: Dockerfile_redis ports: - "6379:6379" networks: frontend: driver: bridge backend: driver: bridge

Dockerfile_redis

 FROM redis:latest

Cuando intento conectarme al servidor redis usando este código

 $redis = new \Redis(); try { $redis->connect('127.0.0.1', 6379); } catch (\Exception $e) { var_dump($e->getMessage()) ; die; }

Da esta advertencia

 Warning: Redis::connect(): connect() failed: Connection refused

¿Alguien sabe cómo conectar el contenedor Redis al contenedor PHP?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tu problema

Docker Compose crea un contenedor docker separado para diferentes servicios. Cada contenedor es, lógicamente hablando, como diferentes servidores informáticos separados que solo se conectan entre sí a través de la red Docker.

Considere cada cuadro en este diagrama como una computadora individual, entonces esto es prácticamente lo que tiene:

 +----------------------------------------------------------+ | your machine | +----------------------------------------------------------+ | +------ (virtual network by docker) -------+ | | | +-----------------+ +-------------------+ +----------------+ | "php" container | | "redis" container | | "db" container | +-----------------+ +-------------------+ +----------------+

Su contenedor PHP no ve ningún redis en "localhost" porque no hay redis en él. Al igual que no vería ningún MySQL en "localhost". Su redis se está ejecutando en el contenedor "redis". Su MySQL se está ejecutando en su contenedor "db".

Lo que lo confunde son las directivas de enlace de puertos (es decir ports en esta definición):

 redis: build: context: . dockerfile: Dockerfile_redis ports: - "6379:6379"

El puerto 6379 del contenedor "redis" está vinculado a su computadora, pero SOLAMENTE a su computadora . Otro contenedor no tiene el mismo acceso a los enlaces de puerto. Entonces, incluso su computadora puede conectarlo con '127.0.0.1:6379', el contenedor php no puede hacer lo mismo.

Solución

Como se describe en Redes en Docker Compose , cada contenedor de docker compose puede acceder a otro contenedor usando el nombre del servicio como nombre de host. Por ejemplo, su programación ejecutada por el servicio php puede acceder a su servicio MySQL con el nombre de host db .

Por lo tanto, debe conectar redis con su nombre de host redis

 $redis = new \Redis(); try { $redis->connect('redis', 6379); } catch (\Exception $e) { var_dump($e->getMessage()) ; die; }
over 4 years ago · Santiago Trujillo Denunciar

0

simplemente elimine el puerto redis y cambie el nombre de host redis a redis en el archivo .env de su proyecto Laravel.

 REDIS_HOST=redis #REDIS_PORT=6379
over 4 years ago · Santiago Trujillo Denunciar

0

Si usa una IP estática para su red, use a continuación en lugar de localhost

 $redis->connect('<static-ip>', 6379);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda