我有一个简单的网站,它使用docker镜像中的revel容器构建。我正在尝试在Cloud Run中运行此镜像。不幸的是,当我转到该网站的URL时,在浏览器中看到了502,并且该日志行2020/10/30 17:27:07 http: proxy error: dial tcp 0.0.0.0:16166: connect: connection refused我以为它与端口有关,但是我尝试将端口最初映射到9898,但仍然在日志行中看到随机端口号。目前,我的Revel应用程序中的端口已按照GCP文档的建议设置为${PORT}
我应该提到我可以毫无问题地在本地部署容器。
Dockerfile:

FROM golang:1.15 AS build
ENV CGO_ENABLED 0
ADD . /go/src/app

# Install revel framework
RUN go get -u github.com/revel/revel
RUN go get -u github.com/revel/cmd/revel
# Run revel app
EXPOSE ${PORT}
ENTRYPOINT revel run -a /go/src/app -p ${PORT} -m dev
展示app.conf片段:
# The IP address on which to listen.
http.addr = 0.0.0.0

# The port on which to listen.
http.port = ${PORT}
更新:建议使用8080的硬编码端口,看看是否可行。我仍然看到502。我尝试再次在本地运行它,看来revel试图在一个端口上进行设置,然后在另一个端口上作为反向代理进行侦听。因此,除非我认为这可能是一个大问题而不是云运行问题
docker run --publish 8080:8080 app
Revel executing: run a Revel application
Changed detected, recompiling
Parsing packages, (may require download if not cached)... Completed
INFO  02:34:24    app     run.go:34: Running revel server
INFO  02:34:24    app   plugin.go:9: Go to /@tests to run the tests.
Revel engine is listening on.. 0.0.0.0:44795

Time to recompile 8.0340966s
Revel proxy is listening, point your browser to : 8080
注意最后一行Revel proxy is listening, point your browser to : 8080但也有Revel engine is listening on.. 0.0.0.0:44795

最佳答案

因此,在进行进一步的调查和讨论之后,似乎当您通过revel run运行revel应用程序时,在随机端口上建立了代理,并且连接失败了。此外,通过revel run运行的最大好处是热交换已部署的代码,这在已部署的上下文中是不必要的。因此,这里的解决方案是通过revel build构建应用程序,然后以这种方式运行该应用程序,以便仅将应用程序端口用于连接。

关于docker - 云运行和发布容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64613763/

10-11 21:39