来自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应用所接受