首頁 >後端開發 >Golang >如何解決 Docker 多階段建置 Go 映像中的「x509:憑證由未知機構簽署」錯誤?

如何解決 Docker 多階段建置 Go 映像中的「x509:憑證由未知機構簽署」錯誤?

Barbara Streisand
Barbara Streisand原創
2024-11-05 08:05:02665瀏覽

How to Resolve

Docker 多階段構建具有證書頒發機構問題的Go 鏡像

問題:

何時嘗試使用Docker 多階段建立在私人公司網路中建立Go 映像,您可能會遇到錯誤,指出「x509:由未知權威機構簽署的憑證」。當 Git 嘗試從安全性 HTTPS 伺服器檢索依賴項時,就會發生這種情況。

原因:

問題源自於系統的 CA 儲存中缺少所需的證書,導致 Git拒絕 HTTPS 連線。

解決方案:

要解決此問題,需要使用 OpenSSL 將遺失的憑證匯入系統的 CA 儲存體中。以下是一個範例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 ["/main"]

說明:

與原始Dockerfile 相比,此Dockerfile 包括幾個額外的步驟。它首先安裝 OpenSSL 並更新系統的 CA 憑證。然後,它使用 OpenSSL 從「github.com」和「proxy.golang.org」檢索憑證並將其匯入到 CA 儲存中。最後,它更新證書,使 Git 能夠在 go mod download 命令期間成功檢索依賴項。

注意:

無需編輯 Dockerfile 來匯入證書,您也可以在代理環境變數上設定環境變數 GIT_SSL_NO_VERIFY=1 。但是,不建議將此方法用於生產用途,因為它會停用 SSL 驗證。

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

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