来自docker容器的ERR_EMPTY_RESPONSE

我一直试图在最后几个小时里弄清楚,但是我被卡住了。

我有一个非常简单的Dockerfile,看起来像这样:

FROM alpine:3.6 COPY gempbotgo / COPY configs /configs CMD ["/gempbotgo"] EXPOSE 8025 

gempbotgo只是一个运行Web服务器和其他东西的二进制文件。 networking服务器在8025上运行,应该回答一个问候世界。

我的问题是与暴露端口。 我像这样运行我的容器(build立之后)

 docker run --rm -it -p 8025:8025 asd 

一切似乎都很好,但当我尝试在浏览器中打开127.0.0.1:8025或尝试一个wget我只是得到一个空的答复。 Chrome:ERR_EMPTY_RESPONSE

该端口被使用,而不受我的Windows 10系统上的防火墙的限制。 在没有容器的情况下运行二进制二进制文件,只需在我的“Windows上的Ubuntu上的Bash”terminal上浏览到127.0.0.1:8025即可。 其他地址返回一个“ERR_CONNECTION_REFUSED”像127.0.0.1:8030,所以那里定义是在端口上的活动。

然后我和他一起走进了那个混蛋

 docker exec -it e1cc6daae4cf /bin/sh 

并用wget在那里检查会发生什么。 也没有问题。 index.html文件下载一个“Hello World”

任何想法为什么docker不发送任何数据? 我也用docker-compose运行了我的容器,但是没有区别。

我也在外部托pipe的VPS上运行容器。 同样的问题在那里…(Debian)

我的代码:(注意Makefile) https://github.com/gempir/gempbotgo/tree/docker

编辑:

得到一些评论后,我改变了我的Dockerfile到一个多阶段的构build。 这是我的Dockerfile现在:

 FROM golang:latest WORKDIR /go/src/github.com/gempir/gempbotgo RUN go get github.com/gempir/go-twitch-irc \ && go get github.com/stretchr/testify/assert \ && go get github.com/labstack/echo \ && go get github.com/op/go-logging COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY configs ./configs COPY --from=0 /go/src/github.com/gempir/gempbotgo/app . CMD ["./app"] EXPOSE 8025 

可悲的是,这并没有改变任何东西,我把这里的一切尽可能靠近指南: https : //docs.docker.com/engine/userguide/eng-image/multistage-build/#use-multi-stage-builds

我也尝试了golang.org中最简单的Dockerfile,看起来像这样:

 FROM golang:onbuild EXPOSE 8025 

但是也没有成功。

你的问题是你绑定到你的代码中的127.0.0.1:8025 。 这使得代码在容器内工作,但不在外面。

您需要绑定到0.0.0.0:8025绑定到容器内的所有接口。 所以来自容器外部的stream量也被你的Go应用所接受