猿问

在 Docker 容器中转到服务器空响应

我有一个类似的 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 上。


凤凰求蛊
浏览 251回答 1
1回答

慕村225694

不要使用localhost(基本上是 的别名127.0.0.1)作为 Docker 容器中的服务器地址。如果你这样做,只有'localhost'(即 Docker 容器网络中的任何服务)可以访问它。删除主机名以确保它可以在容器外访问:// Addr:         "localhost:" + port, // unreachable outside containerAddr:         ":" + port, // i.e. ":3000" - is accessible outside the container
随时随地看视频慕课网APP

相关分类

Go
我要回答