【问题标题】:Docker and gRPC - connection closedDocker 和 gRPC - 连接关闭
【发布时间】:2020-07-10 07:36:12
【问题描述】:

直截了当。我一直在尝试在 docker 容器中移动一些微服务。为简单起见,假设您在同一台机器上有两个微服务,分别称为 A 和 B。这两个微服务都使用 gRPC。微服务 A 想在 B 中调用一个过程。B 在一个 docker 容器中,它在 A 运行的同一台机器上,但不在容器中。当 A 调用一个过程时,我得到rpcerror: code = Unavailable desc = connection closed。

我已经通过以下方式启动了 B: docker run -it -p 51001:51001 B

这是 Dockerfile

FROM golang as builder
WORKDIR /go/src/b
RUN \
    git clone bla bla bla bla /go/src/b \
    && GOOS=linux GOARCH=amd64 \
    go get && CGO_ENABLED=0 go build -a -ldflags '-extldflags "-static"' -o main .
FROM alpine:latest
RUN apk --no-cache add ca-certificates && apk add --update bash
WORKDIR /root/
COPY --from=builder /go/src/b/main .
COPY --from=builder /go/src/b/.env .
EXPOSE 51001
CMD ["./main"]

我检查了端口,一切看起来都很好,无论是在容器内还是在主机上。

我的主机附带 MacOS。

在没有容器的情况下启动时,一切正常。所以它与 docker、grpc 与 docker、一些网络的东西有关,或者它甚至可能是 42 ......不知道。有人吗?

如果您需要其他信息,请尽管询问。

【问题讨论】:

  • 没有人有这么多的 docker 经验?

标签: docker go microservices grpc macos-sierra


【解决方案1】:

我也遇到过这个问题,我可以用

docker run -it --network host [...]

这当然不是真正的修复,只是 docker 网络控制器正在抛出连接。

也许解决方法是更新您的 docker 安装。

【讨论】:

    【解决方案2】:

    遇到了类似的问题。不确定您是如何设置 gRPC 服务器的,但是将侦听器的地址从 localhost:51001 更改为 :51001 为我解决了这个问题。

    Better explained here.

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2021-12-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      相关资源
      最近更新 更多