【问题标题】:Setting up redis a session handler for php with docker-compose使用 docker-compose 为 php 设置 redis 会话处理程序
【发布时间】:2018-08-11 04:39:16
【问题描述】:

我以为 redis 会在 redis conf 中绑定到我的 php 容器,但它失败了:

# Creating Server TCP listening socket phpfpm:6379: bind: Address not available

如果我使用 localhost,则会话缓存不起作用。我假设是因为 redis 服务器拒绝了连接。我正在寻找 redis.conf 文件和 php.ini 文件中需要的内容。我认为应该是这样的:

php.ini

session.save_handler = redis
session.save_path = "tcp://redis:6379"

redis.conf

bind localhost phpfpm

【问题讨论】:

    标签: php docker redis docker-compose


    【解决方案1】:

    我不知道我是否理解你的问题......

    当我遇到网络问题时,我发生了这种情况,你能举一个你的 .YML 配置的例子吗?

    php:
        image: php:7.1-fpm-alpine
        #build: php
        networks:
          - internal_network
        volumes:
          - ../html:/var/www/html
        restart: always
    redis:
        image: redis:4-alpine
        environment:
          #- REDIS_PASSWORD=${REDIS_PASSWORD}
          - REDIS_PASSWORD=YOUR_REDIS_PASSWORD
        command: redis-server --appendonly yes
        volumes:
          - ../data/redis:/data
        networks:
          - internal_network
    nginx:
        image: nginx:1-alpine
        ports:   #only if traefik is disabled
         - 80:80 #only if traefik is disabled
        volumes:
         - /etc/localtime:/etc/localtime:ro
         - ./nginx/conf.d:/etc/nginx/conf.d
         - ../html:/var/www/html
        networks:
         - internal_network
         - external_network
    

    是否已安装扩展程序?你会使用 build 命令吗?

    ./php/Dockerfile

    FROM php:7.1-fpm-alpine
    
    RUN echo http://dl.alpinelinux.org/alpine/latest-stable/community/ >> /etc/apk/repositories \
        && apk add --no-cache shadow curl vim zlib-dev autoconf g++ make re2c \
        && pecl install -o -f redis \
        && docker-php-ext-enable redis.so \
        && pecl clear-cache
    

    您不需要其他任何东西。 你的 redis 必须在 docker 网络中,不能暴露在互联网上

    Link to conf

    默认情况下,如果没有指定“绑定”配置指令,Redis 侦听来自所有可用网络接口的连接 服务器。可以只听一个或多个选定的 使用“绑定”配置指令的接口,后跟一个 或多个 IP 地址。

    例子:

    绑定 192.168.1.100 10.0.0.1 绑定 127.0.0.1 ::1

    ~~~ WARNING ~~~ 如果运行Redis的电脑直接暴露在 互联网,绑定到所有接口是危险的,并且会 将实例公开给 Internet 上的每个人。所以默认情况下我们 取消注释以下绑定指令,这将强制 Redis 只监听 IPv4 回溯接口地址(这意味着 Redis 将只能接受来自正在运行的客户端的连接 到它正在运行的同一台计算机上)。

    如果您确定要让您的实例收听所有 接口只需注释以下行。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 绑定127.0.0.1

    【讨论】:

    • 感谢 nasatome。原来是我的一个愚蠢的错误。我以为我已经安装了 php 扩展,但是当我查看我的 Dockerfile 时,我发现我之前已经将它注释掉了。
    • ./php/Dockerfile - 失败并出现以下错误。警告:忽略dl.alpinelinux.org/alpine/latest-stable/community/x86_64/…:没有这样的文件或目录错误:无法满足的约束:阴影(缺少):需要:世界[阴影]命令'/bin/sh -c echo dl.alpinelinux.org/alpine/latest-stable/community >> /etc/apk/repositories && apk add --no-cache shadow curl vim zlib-dev autoconf g++ make re2c && pecl install -o -f redis && docker-php-ext-enable redis.so && pecl clear-cache' 返回非零代码: 1
    • 这是正确的: FROM php:7.1-fpm-alpine RUN echo uk.alpinelinux.org/alpine/latest-stable/community >> /etc/apk/repositories \ && apk add --no-cache shadow curl vim zlib- dev autoconf g++ make re2c \ && pecl install -o -f redis \ && docker-php-ext-enable redis.so \ && pecl clear-cache
    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多