【问题标题】:why Nginx container cannot resolve redis container by name?为什么 Nginx 容器无法通过名称解析 redis 容器?
【发布时间】: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)。请注意,您可以使用服务名称(redisnginx)或容器名称(local_redislocal_nginx)。
  • 我检查了 local_redis 和 local_redis 和 Lua_project_default 但没有改变任何东西。但是服务名称是一个可以尝试的选项。
  • 这一切都在我尝试时才起作用(Linux 上的 docker 版本 20.10.4)。
  • 使用我的原始配置还是使用服务名称?
  • 正如我在之前的评论中提到的,服务或容器名称都有效。

标签: docker nginx docker-compose lua


【解决方案1】:

我找到了解决方案,但我没有找到问题的根本原因:

我将我的 Nginx-Lua 映像从 danday74/nginx-lua 更改为 fabiocicerchia/nginx-lua,它就像一个魅力。第一个是在 Nginx 1.16 版本上创建的,最后一个是在 Nginx 1.19 上创建的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2015-01-17
    • 1970-01-01
    • 2012-12-09
    相关资源
    最近更新 更多