【发布时间】:2021-07-22 20:43:26
【问题描述】:
我有一个运行两个容器的 docker-compose,一个是带有 Lua 模块的 Nginx,另一个是简单的 Redis,这里是 docker-compose 文件:
version: '3.9'
services:
nginx:
container_name: local_nginx
image: danday74/nginx-lua
ports:
- 8089:80
- 8053:8053
volumes:
- /home/navid/lua_project/nginx/nginx.conf:/nginx/conf/nginx.conf
- /home/navid/lua_project/nginx/www:/nginx/html
- /home/navid/lua_project/lib/resty/redis.lua:/usr/local/share/luajit-2.0.4/resty/redis.lua
redis:
container_name: local_redis
image: redis:latest
ports:
- 6379:6379
在我的 nginx.conf 中,我定义了一个路径来执行 Lua 脚本文件。这是conf文件:
events {}
http {
server {
server_name lua;
listen 8053;
location /redis-request {
content_by_lua_file /nginx/html/my_redis.lua;
}
}
}
在 my_redis 文件中,我尝试使用 this 库连接到 Redis 容器, 我在下面粘贴我的代码:
local redis = require "resty.redis"
local red = redis:new()
-- 1 sec
red:set_timeout(1000)
-- or connect to a unix domain socket file listened
-- by a redis server:
-- local ok, err = red:connect("unix:/path/to/redis.sock")
local ok, err = red:connect("local_redis.lua_project_default", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
但是当我尝试通过浏览器向 Nginx 发送请求时,我收到了这样的错误:
连接失败:没有定义解析器来解析“local_redis.lua_project_default”
如何防止 Nginx 尝试本地服务名称?
更新 当 id 添加 resolve 127.0.0.11; 标签到我的 Nginx 配置文件时,错误变为:
连接失败:连接被拒绝
但我可以从 Nginx 远程登录到我的 Redis 容器。
【问题讨论】:
-
我认为如果你放弃域名应该可以工作(例如,只使用
local_redis而不是local_redis.lua_project_default)。请注意,您可以使用服务名称(redis或nginx)或容器名称(local_redis、local_nginx)。 -
我检查了 local_redis 和 local_redis 和 Lua_project_default 但没有改变任何东西。但是服务名称是一个可以尝试的选项。
-
这一切都在我尝试时才起作用(Linux 上的 docker 版本 20.10.4)。
-
使用我的原始配置还是使用服务名称?
-
正如我在之前的评论中提到的,服务或容器名称都有效。
标签: docker nginx docker-compose lua