Maison > Article > développement back-end > Comment corriger l'erreur « x509 : certificat signé par une autorité inconnue » dans la construction en plusieurs étapes de Docker pour les projets Go ?
Construction en plusieurs étapes de Docker : résolution de l'erreur « x509 : certificat signé par une autorité inconnue »
Lors de la tentative de création d'images Docker pour Go in un réseau d'entreprise privé utilisant des builds à plusieurs étapes, une erreur « x509 : certificat signé par une autorité inconnue » peut survenir. Ce problème provient de problèmes de certificat et d'authentification lors de la récupération des dépendances Go.
Comprendre le problème :
L'erreur se produit car git, qui est utilisé par Go pour accéder aux dépendances, utilise la boucle. Cela nécessite que les certificats nécessaires soient importés dans le magasin CA du système. Initialement, il a été suggéré d'utiliser la variable d'environnement GIT_SSL_NO_VERIFY=1, mais cette approche s'est avérée inefficace pour obtenir des dépendances.
Solution : importer des certificats dans le magasin CA
Pour Pour résoudre ce problème, il est nécessaire d'importer les certificats appropriés dans le magasin CA du système. La méthode pour ce faire varie selon le système d'exploitation, mais implique généralement l'utilisation de la commande openssl.
Par exemple, dans un système basé sur Debian, les commandes suivantes peuvent être utilisées :
Dockerfile modifié :
En incorporant ces étapes d'importation de certificat dans le Dockerfile, le problème peut être résolu, permettant d'obtenir les dépendances et de procéder à la construction avec succès. Vous trouverez ci-dessous un Dockerfile mis à jour :
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"]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!