很奇怪,今天突然发现WordPress Redis Object Cache缓存插件报错无法连接到Redis了。
具体报错如下图:
以为是 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,
];
修改涉及两处:
- 将 host 中的 127.0.0.1 修改为了 docker 的容器名
- 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 控制台插件处刷新界面,开启即可。
填写容器名即可通信的原因
因为可以理解为Docker默认内置了一个小型DNS服务器,记录了容器名和容器IP地址的对应的对应关系,所以可以直接通过主机名进行通信。
想看看?这样:
列出我们docker的网卡,找出容器在使用的,记录下来,比如:1panel-network
docker network ls
docker network inspect 1panel-network
可以看到,这里就记录着我们Docker容器名和容器IP的对应关系。
评论前必须登录!
立即登录 注册