记录一次WordPress插件Redis Object Cache报错“Redis 无法访问: Connection refused [tcp://127.0.0.1:6379]”故障处理方法

很奇怪,今天突然发现WordPress Redis Object Cache缓存插件报错无法连接到Redis了。
具体报错如下图:

WordPress Redis Object Cache缓存插件报错截图

以为是 Redis 容器挂了,到主机上 tcping 了下 127.0.0.1 的 6379 端口,发现是通着的,顿时陷入了沉思······

来吧,老样子,介绍下环境:

  • WordPress 本地主机中部署;
  • PHP 容器化部署;
  • Redis 容器化部署;
  • Openresty 容器化部署。

查了半天,PHP Redis插件、redis容器运行状态及日志、php日志、OpenResty日志,都没发现问题······

最终排查出可能是因为插件自动升级的原因,导致原来插件的配置文件被覆盖成默认了,默认Redis服务地址为:127.0.0.1,传统环境下是没问题的,但是我们的 PHP 是 docker 容器化部署的,这就有问题了,如果填写 127.0.0.1 的话,去尝试连接的则是 PHP 容器内的127地址,所以肯定无法连接,那么我们把此地址改为容器名即可正常与Redis容器内应用通信,详细操作方法如下:

解决办法

1、修改object-cache.php配置文件

位置在网站根目录下的:/wp-content/plugins/redis-cache/includes/object-cache.php

默认为:

    protected function build_parameters() {
        $parameters = [
            'scheme' => 'tcp',
            'host' => '127.0.0.1',
            'port' => 6379,
            'database' => 0,
            'timeout' => 1,
            'read_timeout' => 1,
            'retry_interval' => null,
            'persistent' => false,
        ];

修改为:

    protected function build_parameters() {
        $parameters = [
            'scheme' => 'tcp',
            'host' => '1Panel-redis-kKCk',
            'port' => 6379,
            'database' => 0,
            'password' => 'password',
            'timeout' => 1,
            'read_timeout' => 1,
            'retry_interval' => null,
            'persistent' => false,
        ];

修改涉及两处:

  1. 将 host 中的 127.0.0.1 修改为了 docker 的容器名
  2. password 改为你 Redis 的密码

2、修改wp-config.php配置文件

位置在网站根目录下:/wp-config.php

在最下方添加如下代码:

/** Redis Object Cache */
define( 'WP_REDIS_HOST', '1Panel-redis-kKCk' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', 'password' );/** Redis设置了密码时填写 */

保存。

之后回到 WordPress 控制台插件处刷新界面,开启即可。

Redis Object Cache“Redis 无法访问: Connection refused [tcp://127.0.0.1:6379]”故障处理方法

填写容器名即可通信的原因

因为可以理解为Docker默认内置了一个小型DNS服务器,记录了容器名和容器IP地址的对应的对应关系,所以可以直接通过主机名进行通信。

想看看?这样:

列出我们docker的网卡,找出容器在使用的,记录下来,比如:1panel-network

docker network ls
Docker容器名和容器IP的对应关系
docker network inspect 1panel-network
Docker容器名和容器IP的对应关系

可以看到,这里就记录着我们Docker容器名和容器IP的对应关系。

赞(4) 打赏
未经允许不得转载:万万没想到 » 记录一次WordPress插件Redis Object Cache报错“Redis 无法访问: Connection refused [tcp://127.0.0.1:6379]”故障处理方法

评论 抢沙发

评论前必须登录!

立即登录   注册

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

登录

找回密码

注册