You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Zend Framework 1项目Redis连接适配问题及解决

Docker部署Zend Framework 1项目的Redis连接问题解决

问题背景

有一个基于Zend Framework 1的老旧PHP项目,尝试用Docker部署时遇到Redis连接问题:项目原本默认连接127.0.0.1:6379,但Docker环境中必须使用Redis容器名redis:6379才能正常连接。由于生产环境仍需沿用原有连接方式,不想修改项目核心代码,尝试挂载redis.conf配置文件未解决问题。

现有配置

docker-compose.yml

version: '3'

services:

  nginx:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ../:/var/www/master/eshopy
    depends_on:
      - php
      - mysql
    networks:
      - expando_network

  php:
    build: ./
    image: php-8.1-expando
    container_name: php-8.1-expando
    ports:
      - "9000:9000"
    volumes:
      - ../:/var/www/master/eshopy
      - ./php.ini:/usr/local/etc/php/php.ini
      - ../../library:/var/www/master/library
      - ../library/vendor:/var/www/master/eshopy/vendor
      - ../frontend/library:/var/www/master/eshopy/frontend/library
      - ../admin/library:/var/www/master/eshopy/admin/library
    depends_on:
      - mysql
      - redis
    networks:
      - expando_network

  mysql:
    image: mariadb:10.11.5
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: eshopy
      MYSQL_USER: expando
      MYSQL_PASSWORD: expando2023
    volumes:
      - ./my-custom.cnf:/etc/mysql/conf.d/my-custom.cnf
    ports:
      - "3306:3306"
    networks:
      - expando_network

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.1
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    depends_on:
      - php
      - mysql
    networks:
      - expando_network

  redis:
    image: 'redis:latest'
    ports:
      - "6379:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    healthcheck:
      test: redis-cli ping
      interval: 3s
      timeout: 5s
      retries: 5
    networks:
      - expando_network

  redisinsight:
    image: 'redislabs/redisinsight:latest'
    ports:
      - '8001:8001'
    depends_on:
      - redis
    networks:
      - expando_network

  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - "3000:3000"
    depends_on:
      - php
      - mysql
      - nginx
      - elasticsearch
      - redis
    networks:
      - expando_network

  adminer:
    image: adminer
    ports:
      - "8080:8080"
    depends_on:
      - mysql
    networks:
      - expando_network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
      UPLOAD_LIMIT: 300M
    ports:
      - "8181:80"
    depends_on:
      - mysql
    volumes:
      - ./php.ini:/usr/local/etc/php/conf.d/php.ini
    networks:
      - expando_network

networks:
  elastic:
    driver: bridge 

  expando_network:
    driver: bridge

redis.conf

bind 127.0.0.1
port 6379

PHP Redis调用代码

public function __construct($extLoaded) {
        $this->extLoaded = $extLoaded;
        if ($extLoaded) {
            $this->redis = new Redis(); 
            $this->redis->connect('127.0.0.1', 6379); //not work
            $this->redis->connect('redis', 6379); //work
        }
    }

可行解决方案

步骤1:修改Nginx配置

在Nginx的fastcgi配置中添加环境变量参数:

fastcgi_param PLATFORM docker;

步骤2:调整PHP代码的连接逻辑

在Redis初始化的代码中添加环境判断分支,实现环境自适应连接:

if (getenv('PLATFORM') == 'docker') {
  $this->redis->connect('redis', 6379);
} else {
  $this->redis->connect('127.0.0.1', 6379);
}

内容的提问来源于stack exchange,提问作者Dan Rais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:37:44