Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.5K
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!