Maison > développement back-end > Golang > le corps du texte

Comment corriger l'erreur « x509 : certificat signé par une autorité inconnue » dans la construction en plusieurs étapes de Docker pour les projets Go ?

Susan Sarandon
Libérer: 2024-11-04 00:23:30
original
626 Les gens l'ont consulté

How to Fix

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 :

  1. apt-get update && apt-get install -y ca-certificates openssl
  2. openssl s_client -showcerts -connect github.com:443 /dev/null | openssl x509 -outform PEM > /usr/local/share/ca-certificates/github.crt (pour le certificat GitHub)
  3. openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | openssl x509 -outform PEM > /usr/local/share/ca-certificates/proxy.golang.crt (pour le certificat proxy.golang.org)
  4. update-ca-certificates

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"]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!