Go пустой ответ сервера в Docker контейнере - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть Go сервер, который как-то так. Маршрутизатор - Gorilla MUX

var port string
if port = os.Getenv("PORT"); port == "" {
    port = "3000"
}
srv := &http.Server{
    Handler:      router,
    Addr:         "localhost:" + port,
    WriteTimeout: 15 * time.Second,
    ReadTimeout:  15 * time.Second,
}
fmt.Println("Server is running on port " + port)
log.Fatal(srv.ListenAndServe())

Dockerfile -

# Build Go Server
FROM golang:1.14 AS go-build
WORKDIR /app/server

COPY cmd/ ./cmd
COPY internal/ ./internal
COPY go.mod ./
COPY go.sum ./
RUN go build ./cmd/main.go


CMD ["./main"]

Я получил успешную сборку. Я запустил его с помощью следующей команды

docker run -p 3000:3000 baaf0159d0cd     

И получил следующий вывод. Сервер работает

Server is running on port 3000

Но когда я попытался отправить запрос с помощью curl, я получил пустой ответ

>curl localhost:3000
curl: (52) Empty reply from server

Почему сервер не отвечает должным образом? У меня есть другие маршруты, которые я не указал здесь, и они тоже не отвечают правильно. Кстати, я на MacOS.

1 Ответ

0 голосов
/ 05 апреля 2020

Не используйте localhost (в основном псевдоним 127.0.0.1) в качестве адреса вашего сервера в контейнере Docker. Если вы сделаете это, только localhost (т. Е. Любая служба в сети контейнера Docker) сможет достичь его.

Удалите имя хоста, чтобы убедиться, что к нему можно получить доступ вне контейнера:

// Addr:         "localhost:" + port, // unreachable outside container
Addr:         ":" + port, // i.e. ":3000" - is accessible outside the container
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...