Docker容器内连接gRPC端点提示资源暂时不可用问题
解决Docker容器内连接gRPC服务时“资源暂时不可用”的问题
核心问题是开发容器与gRPC服务不在同一个Docker网络中,导致无法通过服务名my-app直接通信。本地Visual Studio能通过localhost:3000访问,是因为gRPC服务端口已映射到宿主机,但跨容器网络无法直接使用服务名寻址。
方案1:将两个服务加入同一共享网络
- 先创建一个共享Docker网络:
docker network create shared-network
- 修改开发容器的
docker-compose.yml,添加网络配置:
version: "3.8" services: app: build: context: . dockerfile: Dockerfile args: VARIANT: "6.0" NODE_VERSION: "lts/*" image: company/devcontainer:latest environment: - UNIT_TESTS=/workspace/test - ACCEPTANCE=/workspace/acceptance - DOCKER_HOSTNAME=host.docker.internal volumes: - ..:/workspace:cached - /var/run/docker.sock:/var/run/docker.sock networks: - shared-network networks: shared-network: external: true
- 修改gRPC服务的
docker-compose.yml,同样加入共享网络:
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" networks: - shared-network networks: shared-network: external: true
- 重启两个服务后,开发容器即可通过
http://my-app:3000正常连接gRPC服务。
方案2:通过宿主机地址访问gRPC服务
如果不想修改网络配置,可利用host.docker.internal(你已在配置中映射该地址)访问宿主机转发的gRPC服务:
修改C#连接代码:
using var channel = GrpcChannel.ForAddress( "http://host.docker.internal:3000", channelOptions: new GrpcChannelOptions() { Credentials = Grpc.Core.ChannelCredentials.Insecure });
此方式依赖gRPC服务已将3000端口映射到宿主机(你的配置已完成该映射)。
方案3:合并两个docker-compose配置
将开发容器与gRPC服务放入同一个docker-compose.yml,Docker会自动创建默认网络,服务间可直接用服务名通信:
合并后的配置示例:
version: "3.8" services: app: build: context: . dockerfile: Dockerfile args: VARIANT: "6.0" NODE_VERSION: "lts/*" image: company/devcontainer:latest environment: - UNIT_TESTS=/workspace/test - ACCEPTANCE=/workspace/acceptance - DOCKER_HOSTNAME=host.docker.internal volumes: - ..:/workspace:cached - /var/run/docker.sock:/var/run/docker.sock depends_on: - my-app my-app: image: ${MY_APP_IMAGE_NAME:-company/my-app} restart: on-failure ports: - '3000:3000' extra_hosts: - "host.docker.internal:host-gateway"
启动时直接运行该合并配置,开发容器即可通过http://my-app:3000访问gRPC服务。
内容的提问来源于stack exchange,提问作者TheProgrammer
相关产品推荐
相关产品推荐

