【问题标题】:Revel and Docker containerRevel 和 Docker 容器
【发布时间】:2019-05-27 13:36:02
【问题描述】:

我正在尝试创建一个包含 revel 骨架应用程序的 docker 容器。一切似乎都可以构建并创建了容器,但是当我在浏览器中转到 localhost:9000 时,什么也没有出现。
为了确保我的环境正常工作,我创建了一个简单的 hello world go 应用程序并为它创建了一个 docker 容器。使用相同的端口 9000 可以正常工作。这让我觉得我的 dockerfile 中有一些配置不正确。

Dockerfile:

#Compile stage
FROM golang:1.11.4-alpine3.8 AS build-env
ENV CGO_ENABLED 0
RUN apk add --no-cache git
ADD . /go/src/revelapp

# Install revel framework
RUN go get -u github.com/revel/revel
RUN go get -u github.com/revel/cmd/revel
#build revel app
RUN revel build revelapp app dev

# Final stage
FROM alpine:3.8
EXPOSE 9000
WORKDIR /
COPY --from=build-env /go/app /
ENTRYPOINT /run.sh

使用的 Docker 命令:

docker build -t revelapp . && docker run -p 9000:9000 --name revelapp revelapp 

执行命令并创建容器后,控制台显示:

INFO  17:25:01    app     run.go:32: Running revel server                      
INFO  17:25:01    app   plugin.go:9: Go to /@tests to run the tests.           
Revel engine is listening on.. localhost:9000

当我转到 localhost:9000 时,我希望看到文本 It Works!

【问题讨论】:

  • 当您尝试访问该 URL 时会发生什么?
  • 当我去 localhost:9000 chrome 显示:localhost 没有发送任何数据。 ERR_EMPTY_RESPONSE
  • 那么容器日志中有什么内容?
  • 它与控制台中显示的内容相同,也就是我上面帖子的最后一部分中显示的内容。

标签: docker go dockerfile revel


【解决方案1】:

您正在收听 localhost:9000,因此 127.0.0.1 指向您的容器,而不是您的本地机器。

您有两种解决方案可以让它发挥作用:

  • 收听0.0.0.0:9000
  • 在您的 docker run 命令中使用 --network="host":您的 docker 容器中的 127.0.0.1 将指向您的 docker 主机。

【讨论】:

  • 您在哪里看到端口 8000?我在任何地方都找不到这个问题。
  • 我很确定 8000 是一个错字。重点是 0.0.0.0 而不是 localhost,而不是端口。
  • 我使用的是 windows docker CE,所以网络接口绑定到我的本地机器。正如我之前所说,我使用一个简单的 hello world go 应用程序和相同的 dockerfile 进行了测试。使用 localhost:9000 一切正常
  • 我可以通过在 Revel app.conf 文件中将 http.addr 设置为 0.0.0.0 来让它工作。
猜你喜欢
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
相关资源
最近更新 更多