Прямо в точку. Я пытался переместить некоторые микросервисы в docker контейнеры. Для простоты предположим, что у вас есть два микросервиса на одном компьютере, назовите его A и B. Оба микросервиса используют gRP C. Микросервис 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, grp c с docker, некоторыми сетевыми вещами, или может быть даже 42 ... не знаю. Кто-то?
Если вам нужна другая информация, просто спросите.