Cloud 运行 和 Revel 容器
Cloud Run and Revel Container
我有一个使用容器化在 docker 图像中的 revel 构建的简单站点。我正在尝试 运行 在云端 运行 这张图片。不幸的是,当我访问该站点的 URL 时,我在浏览器中看到了 502 和此日志行
2020/10/30 17:27:07 http: proxy error: dial tcp 0.0.0.0:16166: connect: connection refused
我假设它与端口有关,但我尝试将端口最初映射到 9898,但我仍然在日志行中看到一个随机端口号。目前,按照 GCP 文档的建议,我将我的 Revel 应用程序中的端口设置为 ${PORT}
。
我应该提到我可以毫无问题地在本地部署容器。
Docker 文件:
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。我再次在本地尝试 运行ning 它,看起来 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
访问应用程序时,似乎在随机端口上设置了代理,而该连接就是失败的原因。此外,运行ning via revel run
的最大好处是部署代码的热交换,这在部署上下文中是不必要的。所以这里的解决方案是通过 revel build
构建应用程序并 运行 以这种方式连接该应用程序,以便仅应用程序端口用于连接。
我有一个使用容器化在 docker 图像中的 revel 构建的简单站点。我正在尝试 运行 在云端 运行 这张图片。不幸的是,当我访问该站点的 URL 时,我在浏览器中看到了 502 和此日志行
2020/10/30 17:27:07 http: proxy error: dial tcp 0.0.0.0:16166: connect: connection refused
我假设它与端口有关,但我尝试将端口最初映射到 9898,但我仍然在日志行中看到一个随机端口号。目前,按照 GCP 文档的建议,我将我的 Revel 应用程序中的端口设置为 ${PORT}
。
我应该提到我可以毫无问题地在本地部署容器。
Docker 文件:
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。我再次在本地尝试 运行ning 它,看起来 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
访问应用程序时,似乎在随机端口上设置了代理,而该连接就是失败的原因。此外,运行ning via revel run
的最大好处是部署代码的热交换,这在部署上下文中是不必要的。所以这里的解决方案是通过 revel build
构建应用程序并 运行 以这种方式连接该应用程序,以便仅应用程序端口用于连接。