Maison  >  Article  >  développement back-end  >  Comment réparer les erreurs de création d'image en plusieurs étapes Docker : \"x509 : certificat signé par une autorité inconnue\" ?

Comment réparer les erreurs de création d'image en plusieurs étapes Docker : \"x509 : certificat signé par une autorité inconnue\" ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 20:46:03153parcourir

How to Fix Docker Multi-Stage Image Build Errors:

Erreur de création d'image en plusieurs étapes Docker : x509 : certificat signé par une autorité inconnue

Cette erreur se produit lors de la création d'images Docker qui s'appuient sur Git pour la gestion des dépendances, telles que celles utilisant la technique docker-multi-stage-build.

Aperçu du problème

Pendant la création de l'image, Git utilise le magasin CA du système pour vérifier Certificats SSL. Cependant, dans les réseaux privés, ce magasin peut ne pas contenir les certificats nécessaires pour se connecter à des serveurs externes comme GitHub et proxy.golang.org, ce qui entraîne l'erreur « x509 : certificat signé par une autorité inconnue ».

Solution de contournement

Le problème peut être résolu en important les certificats dans le magasin de l'autorité de certification du système.

Solution

  1. Installer OpenSSL : Installez le package OpenSSL sur la machine hôte.
  2. Obtenir les certificats : Récupérez les certificats des serveurs problématiques à l'aide des commandes OpenSSL suivantes :

    • Pour GitHub : openssl s_client -showcerts -connect github.com:443 < /dev/null 2> /dev/null | openssl x509 -outform PEM > ${cert_location}/github.crt
    • Pour proxy.golang.org : openssl s_client -showcerts -connect proxy.golang.org:443 < /dev/null 2> /dev/null | openssl x509 -outform PEM > ${cert_location}/proxy.golang.crt
  3. Importer des certificats : Importez les certificats dans le magasin de l'autorité de certification du système à l'aide de la commande update-ca-certificates.

Dockerfile révisé

Le Dockerfile révisé suivant intègre les étapes d'importation du certificat :

<code class="dockerfile">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 ["/app/main"]</code>

Remarque : La mise à jour La commande -ca-certificates peut prendre quelques minutes. Une fois terminé, les versions ultérieures de Docker devraient se poursuivre sans l'erreur « x509 : certificat signé par une autorité inconnue ».

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!

Déclaration:
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