Hasura 操作处理程序不存在(名称或服务未知)

Hasura action handler does not exist (Name or service not known)

我在 Docker 容器中有一个 Hasura 运行 的实例,并且直接在机器上用 NodeJS/Express 运行 编写了动作处理程序 API。

当我在本地测试所有内容时,它就像一个魅力 (macOS M1),但是当我在服务器上复制相同的设置时 (Ubuntu 20.04),它 returns 一个动作处理程序不会存在错误。

所有其他查询和突变都运行良好,只是操作 return 这个错误

您可以看到 Hasura 和 NodeJS 应用程序都是 运行

hasura docker container

localhost api call

在本地开发中,我的动作处理程序基础 url 是

http://host.docker.internal:5000/api

它工作正常。 我也试过

http://localhost:5000/api

http://127.0.0.1:5000/api

这就是 Hasura 动作调用的确切错误 returns

{
"errors": [
    {
        "extensions": {
            "internal": {
                "error": {
                    "type": "http_exception",
                    "message": "ConnectionFailure Network.Socket.getAddrInfo (called with preferred socket type/protocol: AddrInfo {addrFlags = [], addrFamily = AF_UNSPEC, addrSocketType = Stream, addrProtocol = 0, addrAddress = 0.0.0.0:0, addrCanonName = Nothing}, host name: Just \"host.docker.internal\", service name: Just \"5000\"): does not exist (Name or service not known)"
                },
                "response": null,
                "request": {
                    "body": {
                        "session_variables": {
                            "x-hasura-role": "public"
                        },
                        "input": {
                            "email": "",
                            "password": ""
                        },
                        "action": {
                            "name": "login"
                        }
                    },
                    "url": "http://host.docker.internal:5000/api/auth/login",
                    "headers": []
                }
            },
            "path": "$",
            "code": "unexpected"
        },
        "message": "http exception when calling webhook"
    }
]

}

如果有人遇到同样的问题,我就是这样解决的

将此添加到 docker-compose.yml 文件

    extra_hosts:
    - "host.docker.internal:host-gateway"

防火墙

中允许端口80805000
 sudo ufw allow 8080 
 sudo ufw allow 5000