2017-09-12 8 views
0

私は最後の時間にこれを理解しようとしていましたが、私は立ち往生しています。ドッカーのコンテナからのERR_EMPTY_RESPONSE

私はこのようになります非常に単純なDockerfileあります

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

gempbotgoはウェブサーバといくつかの他のものを実行しているだけで、外出先のバイナリです。 Webサーバーは8025で動作しており、こんにちはの世界で答えなければなりません。

私の問題はポートを公開することです。私は(それを構築した後)は、このような私のコンテナ

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

すべては罰金だが、私はwgetのをブラウザで127.0.0.1:8025を開いたりしようとしようとしたとき、私はちょうど空の応答を取得しました。 Chrome:ERR_EMPTY_RESPONSE

このポートはWindows 10システムで使用され、ファイアウォールによって制限されません。 私の "WindowsのUbuntu on Bash"端末のコンテナを使わずにgoバイナリを実行し、127.0.0.1:8025にブラウズすると、問題なく動作します。 他のアドレスは127.0.0.1:8030のような "ERR_CONNECTION_REFUSED"を返すので、ポート上で何かがアクティブになっています。

私はその後

docker exec -it e1cc6daae4cf /bin/sh 

でconatinerに行って、何が起こるのwgetとそこでチェック。また問題はありません。 index.htmlファイルが「Hello World」でダウンロードされる

ドッカーがデータを送信しない理由は何ですか?私はドッカーでコンテナを走らせましたが、違いはありません。

私は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 

、私はここで、ガイドへのpossbileなどの近くにすべてを保持:https://docs.docker.com/engine/userguide/eng-image/multistage-build/#use-multi-stage-builds

私も見えたgolang.orgからミニマリストDockerfileを試してみました次のようになります。

FROM golang:onbuild 
EXPOSE 8025 

しかし、どちらも成功しません。

+0

バイナリはどのように構築されていますか?コンテナからの出力は?'ubuntu'のような別のベースでlibcの問題ではないことを検証しようとしましたか? –

+0

あなたのgoファイルのコードを投稿してください –

+0

私のコードはhttps://github.com/gempir/gempbotgo/tree/dockerですMakefileを別にコンパイルしています – gempir

答えて

2

あなたの問題は、コード内の127.0.0.1:8025に拘束されていることです。これにより、コードはコンテナ内部からは動作しますが、外部では動作しません。

コンテナ内のすべてのインターフェイスにバインドするには、0.0.0.0:8025にバインドする必要があります。したがって、コンテナの外から来るトラフィックは、あなたのGoアプリでも受け入れられます

関連する問題