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

Laradock中Redis认证异常:始终需认证或凭据无效

Laradock中Redis认证异常问题求助与解决方案

问题概述

Laradock是为Laravel打造的Docker镜像套件,可快速搭建运行环境,但Redis始终存在认证问题:切换v7到v6版本、复制他人配置文件均无法解决,无论如何配置都会触发认证错误,甚至无法执行config:clear命令。

当前配置与操作

容器启动命令

docker-compose up -d apache2 mysql php-fpm redis

Laravel项目.env配置

CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
SESSION_LIFETIME=480
SESSION_SAME_SITE=null

REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

Redis配置文件(redis.conf)

bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass foobared
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

Redis Dockerfile配置

FROM redis:6.0.16
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
RUN mkdir -p /usr/local/etc/redis
COPY redis.conf /usr/local/etc/redis/redis.conf
VOLUME /data
EXPOSE 6379
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
#CMD ["redis-server"]

报错详情

  • 当设置REDIS_PASSWORD=null时,抛出错误:NOAUTH Authentication required.
  • 当设置REDIS_PASSWORD=foobared时,抛出错误:WRONGPASS invalid username-password pair
  • 执行php artisan config:clear时,因相同认证错误无法完成

解决方案尝试方向

1. 修正Redis绑定地址

redis.conf中bind 127.0.0.1会限制Redis仅监听容器内部的本地地址,导致Laravel所在的其他容器无法连接。修改为:

bind 0.0.0.0

然后重启Redis容器:

docker-compose restart redis

2. 验证Redis实际加载的配置

进入Redis容器,检查当前生效的配置:

docker-compose exec redis redis-cli
# 进入Redis命令行后执行以下命令
CONFIG GET requirepass
CONFIG GET bind

若返回的requirepass不是foobared,说明配置文件未被正确加载。检查Dockerfile中COPY redis.conf的路径是否正确,或启动命令是否指定了正确的配置文件路径。

3. 调整Laravel Redis认证配置

Redis 6.0+支持用户名+密码的认证方式,Laravel默认配置可能包含用户名参数导致认证失败。打开config/database.php,确认Redis配置中的用户名设置:

'redis' => [
    'client' => env('REDIS_CLIENT', 'phpredis'),
    'options' => [
        'cluster' => env('REDIS_CLUSTER', 'redis'),
        'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        'username' => env('REDIS_USERNAME', null), // 确保此处为null或空值
        'password' => env('REDIS_PASSWORD', null),
        'database' => env('REDIS_DB', 0),
    ],
    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],
],

同时在.env中添加:

REDIS_USERNAME=

4. 重建Redis容器清理缓存

旧容器缓存可能导致配置不生效,删除并重新创建Redis容器:

docker-compose stop redis
docker-compose rm -f redis
docker-compose up -d redis

5. 关闭保护模式(可选)

若上述步骤无效,可关闭Redis的保护模式:
修改redis.conf:

protected-mode no

配合bind 0.0.0.0使用,然后重启容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:15:35