繁体   English   中英

连接到 grpc 端点时,Docker 容器中的资源暂时不可用

[英]Resource temporarily unavailable in Docker container when connecting to grpc endpoint

我正在尝试连接到 docker 容器中的 grpc 服务,但是当我的代码运行连接时,它会发出资源暂时不可用错误。

Docker-compose 用于开发容器。 我使用以下方法启动它: docker-compose -f.devcontainer/docker-compose.yml up

version: "3.8"
services:
    app:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        # Update 'VARIANT' to pick a version of .NET: 3.1, 5.0, 6.0
        VARIANT: "6.0"
        # Optional version of Node.js
        NODE_VERSION: "lts/*"
    image: company/devcontainer:latest
    environment:
      - UNIT_TESTS=/workspace/test
      - ACCEPTANCE=/workspace/acceptance
      - DOCKER_HOSTNAME=host.docker.internal

    # Attaches Host Docker Daemon to devcontainer and directories
    volumes:
      - ..:/workspace:cached
      - /var/run/docker.sock:/var/run/docker.sock

Docker-compose grpc服务

version: "3.8"
services:
    my-app:
        image: ${MY_APP_IMAGE_NAME:-company/my-app}
        restart: on-failure
        ports:
          - '3000:3000'
        extra_hosts:
          - "host.docker.internal:host-gateway"

C# 连接到 my-app 的代码,这是一个 grpc 服务

using var channel = GrpcChannel.ForAddress(
                "http://my-app:3000",
                channelOptions: new GrpcChannelOptions() {
                    Credentials = Grpc.Core.ChannelCredentials.Insecure
                });

当我使用 localhost:3000 使用 visual studio 在本地运行测试时,它工作正常。 我使用 docker-compose up 命令启动所有内容。 一旦我尝试使用我的 grpc 通道,我得到的资源暂时不可用,但我确实看到该服务在 docker 内启动。

正如我在评论中指出的那样,问题在于在不同的网络上运行服务。 一种可能的解决方案是手动创建一个.network

docker network create my-network

然后在两个docker-compose文件中设置默认的external.network

networks:
  default:
    external: true
    name: my-network

更多信息: https://docs.docker.com/compose/compose-file/.networks-top-level-element

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM