Docker Multi-Stage Build Go Images mit Problemen mit der Zertifizierungsstelle
Problem:
Wann Beim Versuch, Go-Images in einem privaten Unternehmensnetzwerk mithilfe eines mehrstufigen Docker-Builds zu erstellen, wird möglicherweise die Fehlermeldung „x509: Zertifikat signiert von unbekannt“ angezeigt Autorität.“ Dies tritt auf, wenn Git versucht, Abhängigkeiten von sicheren HTTPS-Servern abzurufen.
Ursache:
Das Problem ist auf das Fehlen erforderlicher Zertifikate im CA-Speicher des Systems zurückzuführen, wodurch Git um die HTTPS-Verbindungen abzulehnen.
Lösung:
An Um das Problem zu beheben, müssen die fehlenden Zertifikate mithilfe von OpenSSL in den CA-Speicher des Systems importiert werden. Hier ist eine Beispiel-Docker-Datei, die zeigt, wie dies erreicht wird:
FROM golang:latest as builder RUN apt-get update && apt-get install -y ca-certificates openssl ARG cert_location=/usr/local/share/ca-certificates # Get certificate from "github.com" RUN openssl s_client -showcerts -connect github.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > ${cert_location}/github.crt # Get certificate from "proxy.golang.org" RUN openssl s_client -showcerts -connect proxy.golang.org:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > ${cert_location}/proxy.golang.crt # Update certificates RUN update-ca-certificates WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN GO111MODULE="on" CGO_ENABLED=0 GOOS=linux go build -o main ${MAIN_PATH} FROM alpine:latest LABEL maintainer="Kozmo" RUN apk add --no-cache bash WORKDIR /app COPY --from=builder /app/main . EXPOSE 8080 CMD ["/main"]
Erklärung:
Diese Docker-Datei enthält im Vergleich zum Original mehrere zusätzliche Schritte. Es installiert zunächst OpenSSL und aktualisiert die CA-Zertifikate des Systems. Anschließend ruft es mithilfe von OpenSSL die Zertifikate von „github.com“ und „proxy.golang.org“ ab und importiert sie in den CA-Speicher. Schließlich werden die Zertifikate aktualisiert, sodass Git die Abhängigkeiten während des Befehls „go mod download“ erfolgreich abrufen kann.
Hinweis:
Anstatt die Docker-Datei zum Importieren der Zertifikate zu bearbeiten, Sie können auch die Umgebungsvariable GIT_SSL_NO_VERIFY=1 für Ihre Agent-Umgebungsvariablen festlegen. Dieser Ansatz wird jedoch nicht für den Produktionseinsatz empfohlen, da er die SSL-Überprüfung deaktiviert.
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „x509: von unbekannter Stelle signiertes Zertifikat' in Docker Multi-Stage Build Go-Images?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!