Ich habe versucht, dies in den letzten Stunden herauszufinden, aber ich stecke fest.ERR_EMPTY_RESPONSE von Docker Container
Ich habe eine sehr einfache Dockerfile, die wie folgt aussieht:
FROM alpine:3.6
COPY gempbotgo/
COPY configs /configs
CMD ["/gempbotgo"]
EXPOSE 8025
gempbotgo nur ein, die einen Webserver und einige andere Sachen läuft gehen binär ist. Der Webserver läuft auf 8025 und sollte mit einer Hallo Welt antworten.
Mein Problem ist mit dem Freilegen von Ports. Ich ließ meine Container wie folgt (nach dem Bau)
docker run --rm -it -p 8025:8025 asd
Alles scheint in Ordnung, aber wenn ich versuche, 127.0.0.1:8025 im Browser zu öffnen oder eine wget versuchen bekomme ich nur eine leere Antwort. Chrome: ERR_EMPTY_RESPONSE
Der Port wird verwendet und nicht von der Firewall auf meinem Windows 10-System eingeschränkt. Das Ausführen der Go-Binärdatei ohne Container nur auf meinem "Bash auf Ubuntu unter Windows" -Terminal und dann zu 127.0.0.1:8025 Browsing funktioniert ohne Probleme. Andere Adressen haben einen "ERR_CONNECTION_REFUSED" wie 127.0.0.1:8030 zurückgegeben, also ist definitiv etwas am Port aktiv.
Ich ging dann in die conatiner mit
docker exec -it e1cc6daae4cf /bin/sh
und dort mit einem wget überprüft, was passiert. Auch da keine Probleme. index.html Datei wird mit einem "Hello World" heruntergeladen
Irgendwelche Ideen warum Docker sendet keine Daten? Ich habe auch meinen Container mit Docker-Compose bearbeitet aber keinen Unterschied da.
Ich lief auch den Container auf meinem extern gehosteten VPS. Gleiche Problem gibt es ... (Debian)
Mein Code: (beachten Sie die Makefile) https://github.com/gempir/gempbotgo/tree/docker
Edit:
Nachdem einige Kommentare bekommen änderte ich meine Dockerfile zu einem mehrstufigen bauen. Das ist mein Dockerfile jetzt:
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
Leider dies nichts geändert hat, habe ich alles so nah wie possbile an der Führungs hier gehalten: https://docs.docker.com/engine/userguide/eng-image/multistage-build/#use-multi-stage-builds
Ich habe auch die minimalistische Dockerfile von golang.org versucht, die aussieht wie folgt:
FROM golang:onbuild
EXPOSE 8025
Aber auch kein Erfolg damit.
Wie wird die Binärdatei erstellt? Irgendwelche Ausgaben vom Container?Versucht eine andere Basis wie 'ubuntu', um zu verifizieren, dass es kein libc-Problem ist? –
Geben Sie den Code Ihrer Go-Datei ein –
Hier ist mein Code https://github.com/gempir/gempbotgo/tree/docker Beachten Sie das Makefile, das ich anders kompiliere – gempir