我有一个类似的 Go 服务器。路由器是 Gorilla MUXvar port stringif 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 ServerFROM golang:1.14 AS go-buildWORKDIR /app/serverCOPY cmd/ ./cmdCOPY internal/ ./internalCOPY go.mod ./COPY go.sum ./RUN go build ./cmd/main.goCMD ["./main"]我成功构建了。我用以下命令运行它docker run -p 3000:3000 baaf0159d0cd 我得到了以下输出。服务器正在运行Server is running on port 3000但是当我尝试使用 curl 发送请求时,我得到了空响应>curl localhost:3000curl: (52) Empty reply from server为什么服务器没有正确响应?我还有另一条路线我没有放在这里,它们也没有正确响应。顺便说一句,我在 MacOS 上。
1 回答
慕村225694
TA贡献1880条经验 获得超4个赞
不要使用localhost(基本上是 的别名127.0.0.1)作为 Docker 容器中的服务器地址。如果你这样做,只有'localhost'(即 Docker 容器网络中的任何服务)可以访问它。
删除主机名以确保它可以在容器外访问:
// Addr: "localhost:" + port, // unreachable outside container
Addr: ":" + port, // i.e. ":3000" - is accessible outside the container
- 1 回答
- 0 关注
- 250 浏览
添加回答
举报
0/150
提交
取消