首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nestjs grpc客户端无法将dns解析为docker容器中的grpc服务。

nestjs grpc客户端无法将dns解析为docker容器中的grpc服务。
EN

Stack Overflow用户
提问于 2022-09-18 11:32:12
回答 1查看 240关注 0票数 0

我有一个grpc服务和一个简单的http服务器作为grpc客户端。他们在当地跑步时工作很好。但是,一旦放入单独的码头容器中,它们就无法建立连接。grpc服务运行并公开端口:5001。

在nestjs grpc客户机应用程序中注册grpc服务

代码语言:javascript
运行
复制
  ClientsModule.register([
      {
        name: "TOKEN_NAME",
        transport: Transport.GRPC,
        options: {
           ...GRPC_OPTIONS,
           url: process.env.GRPC_SERVICE_URL
        },
      },
    ]),

我尝试使用容器名称作为URL:

代码语言:javascript
运行
复制
version: '3.9'
services:
  grpc-service:
    restart: always
    build: ./grpc-service
    container_name: grpc-service
  grpc-client:
    restart: always
    build: ./backend
    container_name: grpc-client
#    links:
#      - "grpc-service:service"
    depends_on:
      - grpc-service
    ports:
      - "3000:3000"
    environment:
      - GRPC_SERVICE_URL=http://grpc-service:5001
#     - GRPC_SERVICE_URL=http://service:5001

并尝试创建网络并分配IP地址:

代码语言:javascript
运行
复制
version: '3.9'
networks:
  mynetwork:
    driver: bridge
    ipam:
      config:
        - subnet: 179.20.0.0/24

services:
  grpc-service:
    restart: always
    build: ./grpc-service
    container_name: grpc-service
    networks:
      mynetwork:
        ipv4_address: 179.20.0.5
  grpc-client:
    restart: always
    build: ./backend
    container_name: grpc-client
    networks:
      mynetwork:
        ipv4_address: 179.20.0.6

    depends_on:
      - grpc-service
    ports:
      - "3000:3000"
    environment:
      - GRPC_SERVICE_URL=179.20.0.5:5001

错误:

使用http://grpc-service:5001

代码语言:javascript
运行
复制
grpc-client       | [Nest] 1  - 09/20/2022, 12:20:14 PM   ERROR [ExceptionsHandler] 14 UNAVAILABLE: Name resolution failed for target dns:http://grpc-service:5001
grpc-client       | Error: 14 UNAVAILABLE: Name resolution failed for target dns:http://grpc-service:5001
grpc-client       |     at Object.callErrorFromStatus (/node_modules/@grpc/grpc-js/build/src/call.js:31:19)
grpc-client       |     at Object.onReceiveStatus (/node_modules/@grpc/grpc-js/build/src/client.js:190:52)
grpc-client       |     at Object.onReceiveStatus (/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:365:141)
grpc-client       |     at Object.onReceiveStatus (/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:328:181)
grpc-client       |     at /node_modules/@grpc/grpc-js/build/src/call-stream.js:188:78
grpc-client       |     at processTicksAndRejections (node:internal/process/task_queues:78:11)
grpc-client       | for call at
grpc-client       |     at ServiceClientImpl.makeUnaryRequest (/node_modules/@grpc/grpc-js/build/src/client.js:160:30)
grpc-client       |     at ServiceClientImpl.<anonymous> (/node_modules/@grpc/grpc-js/build/src/make-client.js:105:19)
grpc-client       |     at Observable._subscribe (/node_modules/@nestjs/microservices/client/client-grpc.js:177:35)
grpc-client       |     at Observable._trySubscribe (/node_modules/rxjs/dist/cjs/internal/Observable.js:41:25)
grpc-client       |     at /node_modules/rxjs/dist/cjs/internal/Observable.js:35:31
grpc-client       |     at Object.errorContext (/node_modules/rxjs/dist/cjs/internal/util/errorContext.js:22:9)
grpc-client       |     at Observable.subscribe (/node_modules/rxjs/dist/cjs/internal/Observable.js:26:24)
grpc-client       |     at /node_modules/rxjs/dist/cjs/internal/lastValueFrom.js:10:16
grpc-client       |     at new Promise (<anonymous>)
grpc-client       |     at lastValueFrom (/node_modules/rxjs/dist/cjs/internal/lastValueFrom.js:7:12)

使用179.20.0.5:5001

代码语言:javascript
运行
复制
grpc-client       | [Nest] 1  - 09/20/2022, 12:22:14 PM   ERROR [ExceptionsHandler] 14 UNAVAILABLE: No connection established
grpc-client       | Error: 14 UNAVAILABLE: No connection established
grpc-client       |     at Object.callErrorFromStatus (/node_modules/@grpc/grpc-js/build/src/call.js:31:19)
grpc-client       |     at Object.onReceiveStatus (/node_modules/@grpc/grpc-js/build/src/client.js:190:52)
grpc-client       |     at Object.onReceiveStatus (/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:365:141)
grpc-client       |     at Object.onReceiveStatus (/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:328:181)
grpc-client       |     at /node_modules/@grpc/grpc-js/build/src/call-stream.js:188:78
grpc-client       |     at processTicksAndRejections (node:internal/process/task_queues:78:11)
grpc-client       | for call at
grpc-client       |     at ServiceClientImpl.makeUnaryRequest (/node_modules/@grpc/grpc-js/build/src/client.js:160:30)
grpc-client       |     at ServiceClientImpl.<anonymous> (/node_modules/@grpc/grpc-js/build/src/make-client.js:105:19)
grpc-client       |     at Observable._subscribe (/node_modules/@nestjs/microservices/client/client-grpc.js:177:35)
grpc-client       |     at Observable._trySubscribe (/node_modules/rxjs/dist/cjs/internal/Observable.js:41:25)
grpc-client       |     at /node_modules/rxjs/dist/cjs/internal/Observable.js:35:31
grpc-client       |     at Object.errorContext (/node_modules/rxjs/dist/cjs/internal/util/errorContext.js:22:9)
grpc-client       |     at Observable.subscribe (/node_modules/rxjs/dist/cjs/internal/Observable.js:26:24)
grpc-client       |     at /node_modules/rxjs/dist/cjs/internal/lastValueFrom.js:10:16
grpc-client       |     at new Promise (<anonymous>)
grpc-client       |     at lastValueFrom (/node_modules/rxjs/dist/cjs/internal/lastValueFrom.js:7:12)

编辑

我还尝试使用端口映射运行grpc服务,在本地运行5001:5001,尝试在localhost:5001上连接grpc服务。在这种情况下,我得到了connection dropped error

代码语言:javascript
运行
复制
  [Nest] 93680  - 09/24/2022, 2:52:50 PM   ERROR [ExceptionsHandler] 14 UNAVAILABLE: Connection dropped
Error: 14 UNAVAILABLE: Connection dropped
         at Object.callErrorFromStatus (/Users/grpc-docker/backend/node_modules/@grpc/grpc-js/src/call.ts:81:17)
         at Object.onReceiveStatus (/Users/grpc-docker/backend/node_modules/@grpc/grpc-js/src/client.ts:352:36)
         at Object.onReceiveStatus (/Users/grpc-docker/backend/node_modules/@grpc/grpc-js/src/client-interceptors.ts:462:34)
         at Object.onReceiveStatus (/Users/grpc-docker/backend/node_modules/@grpc/grpc-js/src/client-interceptors.ts:424:48)
         at /Users/grpc-docker/backend/node_modules/@grpc/grpc-js/src/call-stream.ts:330:24
         at processTicksAndRejections (node:internal/process/task_queues:78:11)
  for call at
  at ServiceClientImpl.makeUnaryRequest (/Users/grpc-docker/backend/node_modules/@grpc/grpc-js/src/client.ts:324:26)
  at ServiceClientImpl.<anonymous> (/Users/grpc-docker/backend/node_modules/@grpc/grpc-js/src/make-client.ts:189:15)
  at Observable._subscribe (/Users/grpc-docker/backend/node_modules/@nestjs/microservices/client/client-grpc.js:177:35)
  at Observable._trySubscribe (/Users/grpc-docker/backend/node_modules/rxjs/src/internal/Observable.ts:245:19)
  at /Users/grpc-docker/backend/node_modules/rxjs/src/internal/Observable.ts:235:18
  at Object.errorContext (/Users/grpc-docker/backend/node_modules/rxjs/src/internal/util/errorContext.ts:29:5)
  at Observable.subscribe (/Users/grpc-docker/backend/node_modules/rxjs/src/internal/Observable.ts:221:5)
  at /Users/grpc-docker/backend/node_modules/rxjs/src/internal/lastValueFrom.ts:59:12
  at new Promise (<anonymous>)
  at lastValueFrom (/Users/grpc-docker/backend/node_modules/rxjs/src/internal/lastValueFrom.ts:56:10)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-27 10:57:50

基本上,问题在于grpc服务是如何启动的。

Nestjs的createMicroservice方法接受grpc选项,其中一个是url。但是,我的设置为localhost:5001,显然不能从容器外部访问它。在将其更改为0.0.0.0:5001之后,就没有建立连接的问题了。在弄清楚这一点之后,我找到了一个更详细的解释它的堆栈交换线程

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73762401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档