gem*_*pir 1 windows bash docker docker-compose
我一直在尝试在最近几个小时内解决这个问题,但是我陷入了困境。
我有一个非常简单的Dockerfile,看起来像这样:
FROM alpine:3.6
COPY gempbotgo /
COPY configs /configs
CMD ["/gempbotgo"]
EXPOSE 8025
Run Code Online (Sandbox Code Playgroud)
gempbotgo只是运行网络服务器和其他一些东西的go二进制文件。该网络服务器在8025上运行,并且应该向世界问好。
我的问题是暴露端口。我这样运行容器(构建后)
docker run --rm -it -p 8025:8025 asd
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好,但是当我尝试在浏览器中打开127.0.0.1:8025或尝试wget时,我只是得到一个空响应。Chrome:ERR_EMPTY_RESPONSE
Windows 10系统上的防火墙使用了该端口,但不受该端口的限制。仅在我的“ Windows上的Ubuntu上的Bash”终端上运行不带容器的go二进制文件,然后浏览至127.0.0.1:8025即可顺利进行。其他地址返回了“ ERR_CONNECTION_REFUSED”,例如127.0.0.1:8030,因此该端口上肯定有活动的东西。
然后,我带着
docker exec -it e1cc6daae4cf /bin/sh
Run Code Online (Sandbox Code Playgroud)
并在那里用wget进行检查。也没有问题。使用“ Hello World”下载index.html文件
有什么想法为什么码头工人不发送任何数据?我也用docker-compose运行了我的容器,但没有任何区别。
我还在外部托管的VPS上运行了容器。那里同样的问题...(Debian)
我的代码:(注意Makefile) https://github.com/gempir/gempbotgo/tree/docker
编辑:
在收到一些评论后,我将Dockerfile更改为多阶段构建。现在是我的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
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这并没有改变任何东西,我将所有内容都尽可能地保持在此处的指南的位置:https : //docs.docker.com/engine/userguide/eng-image/multistage-build/#use-multi-stage-builds
我还尝试了golang.org提供的简约Dockerfile,如下所示:
FROM golang:onbuild
EXPOSE 8025
Run Code Online (Sandbox Code Playgroud)
但那也没有成功。
Tar*_*ani 14
您的问题是您要绑定到127.0.0.1:8025内部代码。这使代码从容器内部而不是外部工作。
您需要绑定到0.0.0.0:8025以绑定到容器内的所有接口。因此,Go应用程序也接受来自容器外部的流量
小智 5
添加到已接受的答案:我在尝试运行 docker/getting-started 时遇到了相同的错误消息。
问题是“入门”正在使用端口 80,而这netsh http show urlacl在我的机器上被“占用”()。
我不得不使用docker run -d -p 8888:80 docker/getting-started8888 是一个未使用的端口。然后打开“http://localhost:8888/tutorial/”。
| 归档时间: |
|
| 查看次数: |
2716 次 |
| 最近记录: |