【发布时间】:2019-12-20 14:03:42
【问题描述】:
我曾经使用 Gin(Golang 框架)并将 docker 镜像部署到 GKE。 它工作得很好。
但是当我将 Gin 切换到 Echo 时服务器不再响应(它也是 Golang 框架)
我认为是因为端口组合(端口转发)有问题。
我的回显服务器代码如下所示。
func main() {
e := presentation.Router()
e.Logger.Fatal(e.Start(":8080")) // listen and serve on :8080
}
我的 dockerfile 如下所示。
FROM alpine:3.9
WORKDIR /app
ADD main /app
ENV PORT 80
EXPOSE 80
CMD ["./main"]
当请求到达 80 端口时,它必须渲染到 8080 端口(容器端口)。 但目前它似乎不像上面那样工作。
如何匹配外端口和内端口??
【问题讨论】:
-
监听的是什么主机/接口?
127.0.0.1/localhost?还是0.0.0.0?如果是前者,那就是它不起作用的原因。我的猜测是 Gin 可能默认监听0.0.0.0而 Echo 没有? -
echo正在侦听并服务于端口 8080,但您正在暴露容器的端口 80,您是否正在做一些端口转发以将请求从 80 定向到 8080,如果是,请分享该代码同样,如果没有,则需要暴露容器的8080端口。 -
@johnharris85 感谢您的回答!实际上 gin 和 echo 都在收听
127.0.0.1/localhost -
@PraveenRewar 我没有做任何关于端口转发的事情。我将
EXPOSE 80更改为EXPOSE 8080并部署到GKE,但服务器仍然没有给我们任何响应... -
您是在尝试从另一个容器还是从主机本身访问 API(或其他任何东西)。如果您尝试从主机访问它,那么您还需要进行端口映射。
docker run -p 8080:8080 image_name这将在容器运行时将容器的 8080 端口映射到主机的 8080 端口。
标签: docker go kubernetes echo google-kubernetes-engine