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中文網其他相關文章!