OTP Docker容器启动报Redis认证错误:如何设置密码?
解决Docker容器中OTP服务启动的Redis认证错误
嘿,我来帮你拆解下这个问题:
从日志里的核心错误 ERR Client sent AUTH, but no password is set 就能看出来——你的OTP服务已经生成了Redis密码(日志里的e2ee2e4e2ba560ee9e95d32d947c74f33a259e02),并且尝试用这个密码去连接Redis,但Redis本身根本没启用密码认证,所以拒绝了客户端的AUTH请求,导致服务启动失败。
简单说就是:生成的密码只告诉了OTP服务,没同步给Redis实例。
接下来给你几个具体的解决方向:
1. 单容器场景的配置修正
如果你的OTP服务和Redis打包在同一个容器里,大概率是启动脚本的顺序或配置遗漏了:
- 找到容器内的Redis配置文件(通常路径是
/etc/redis/redis.conf,或项目自带的配置路径),确认是否存在requirepass配置项; - 查看项目的启动脚本(比如
entrypoint.sh),检查是不是在生成Redis密码后,没把密码写入Redis配置就直接启动了Redis; - 可以在启动脚本里添加一行,自动把生成的密码注入Redis配置,要确保这行命令在启动Redis前执行:
echo "requirepass $REDIS_PASSWORD" >> /path/to/your/redis.conf
2. 多容器(Docker Compose)场景的配置修正
如果你用Docker Compose把OTP服务和Redis分成两个容器部署,需要确保两边的密码完全一致:
- 在Redis服务的配置里,通过
command参数直接设置密码:services: redis: image: redis:latest command: redis-server --requirepass e2ee2e4e2ba560ee9e95d32d947c74f33a259e02 otp-service: build: . environment: - REDIS_PASSWORD=e2ee2e4e2ba560ee9e95d32d947c74f33a259e02 - 这样Redis启动时会自动启用密码认证,OTP服务也能带着正确的密码连接。
3. 临时测试验证
你可以手动进入容器快速验证问题:
- 进入运行中的容器:
docker exec -it <你的容器ID> bash - 先启动带密码的Redis:
redis-server --requirepass e2ee2e4e2ba560ee9e95d32d947c74f33a259e02 - 另开一个终端进入容器,启动OTP服务,如果不再报错,就说明确实是Redis未配置密码导致的问题。
内容的提问来源于stack exchange,提问作者Tara Prasad Gurung
相关产品推荐
相关产品推荐

