Nginx容器无法通过名称解析Redis容器的问题求助
解决Nginx Lua连接Redis容器的解析与连接问题
咱们一步一步来解决你遇到的这两个问题——先是域名解析失败,然后是连接拒绝:
1. 先搞定域名解析错误:别用带网络后缀的服务名
你第一个错误no resolver defined to resolve "local_redis.lua_project_default",其实是因为多此一举加了网络后缀。在Docker Compose创建的默认网络里,直接用服务名local_redis就能访问Redis容器,不需要加上lua_project_default这个网络名称后缀。
赶紧把my_redis.lua里的连接代码改成这样:
local ok, err = red:connect("local_redis", 6379)
2. 正确配置Nginx的Resolver(如果需要用域名解析)
如果你之后还要用类似的域名连接其他容器,OpenResty的Lua模块需要Nginx配置正确的DNS解析器。Docker内部自带了一个DNS服务,地址是127.0.0.11,专门用来处理容器间的域名解析。你需要在Nginx的http块里加上这行配置:
http { resolver 127.0.0.11 valid=30s; # 缓存解析结果30秒,减少解析次数 server { # 你的server配置保持不变 } }
3. 排查连接拒绝的问题
你说加了resolver后出现connection refused,但telnet能通,这大概率是配置细节出了问题,咱们逐一排查:
- 再确认Lua脚本里的主机名:一定要用
local_redis,别再带那个网络后缀了,Docker Compose的服务名在同一网络里就是有效的主机名。 - 检查Redis的绑定设置:官方
redis:latest镜像默认是允许所有IP访问的(配置里是bind 0.0.0.0),但如果你自己改了redis.conf,要确保没把绑定地址设成127.0.0.1——那样的话只有Redis容器自己能访问,其他容器连不上。 - 再验证容器间的连通性:进入Nginx容器,执行
ping local_redis和telnet local_redis 6379,确认能正常连通。如果这两步都没问题,那问题肯定在Lua代码的配置上。 - 看看Redis有没有正常启动:跑一下
docker logs local_redis,看看日志里有没有报错,确认Redis服务已经完全启动了。
给你一个完整的可运行示例
修改后的my_redis.lua(加了测试代码)
local redis = require "resty.redis" local red = redis:new() -- 设置连接超时为1秒 red:set_timeout(1000) -- 用Docker服务名连接Redis local ok, err = red:connect("local_redis", 6379) if not ok then ngx.say("failed to connect: ", err) return end -- 测试:设置一个键值对 ok, err = red:set("lua_test", "hello from nginx lua!") if not ok then ngx.say("failed to set key: ", err) return end -- 读取刚才设置的键 local res, err = red:get("lua_test") if not res then ngx.say("failed to get key: ", err) return end ngx.say("Redis response: ", res) -- 把连接放回连接池,避免频繁创建销毁连接(优化性能) local ok, err = red:set_keepalive(10000, 100) if not ok then ngx.say("failed to set keepalive: ", err) return end
修改后的nginx.conf
events {} http { resolver 127.0.0.11 valid=30s; server { server_name lua; listen 8053; location /redis-request { content_by_lua_file /nginx/html/my_redis.lua; } } }
这样调整之后,再访问http://你的主机IP:8053/redis-request,应该就能正常拿到Redis的响应了。
内容的提问来源于stack exchange,提问作者Navid_pdp11
相关产品推荐
相关产品推荐

