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
相关产品推荐
相关产品推荐

