首頁  >  文章  >  後端開發  >  如何修復 Docker 多階段映像建置錯誤:「x509:未知機構簽署的憑證」?

如何修復 Docker 多階段映像建置錯誤:「x509:未知機構簽署的憑證」?

Patricia Arquette
Patricia Arquette原創
2024-11-03 20:46:03154瀏覽

How to Fix Docker Multi-Stage Image Build Errors:

Docker 多階段鏡像建置錯誤:x509:憑證由未知機構簽署

建置依賴Git 的Docker 映像時會出現此錯誤用於依賴管理,例如使用docker-multi-stage-build 技術的依賴管理。

問題概述

在鏡像建置過程中,Git 使用系統 CA 儲存來驗證SSL 憑證。但是,在專用網路中,此儲存可能不包含連接到 GitHub 和 proxy.golang.org 等外部伺服器所需的證書,從而導致「x509:證書由未知機構簽署」錯誤。

解決方法

可以透過將憑證匯入系統CA儲存來解決該問題。

解決方案

  1. 安裝 OpenSSL: 在主機上安裝 OpenSSL 軟體套件。
  2. 取得憑證:使用以下OpenSSL 指令擷取有問題的伺服器的憑證:

    • 對於GitHub:openssl s_client -showcerts com:443 /dev/null | openssl x509 -outform PEM > > ${cert_location}/github.crt
    • 對於proxy.gonectorg:openssllang sxy_client -showcerts -connectnect proect .golang.org:443 /dev/null | openssl x509 -outform PEM > > ${cert_location}/proxy.golang.crt

<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>

導入憑證:使用update-ca-certificates 指令將憑證匯入系統CA 儲存體。 修訂後的Dockerfile以下修訂後的Dockerfile 合併了憑證匯入步驟: 更新-ca-certificates 指令可能需要幾分鐘才能完成。完成後,後續的 Docker 建置應該會繼續進行,而不會出現「x509:憑證由未知機構簽署」錯誤。

以上是如何修復 Docker 多階段映像建置錯誤:「x509:未知機構簽署的憑證」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn