解決Docker 多階段Go 映像建置中的「x509:憑證由未知機構簽署」錯誤
嘗試建置多階段時在私有網路中為Go 應用程式暫存Docker 映像時,您可能會遇到以下錯誤:
x509: certificate signed by unknown authority
此錯誤是由於在透過go get 或go mod download 下載依賴項時憑證驗證困難而出現的。雖然設定 GIT_SSL_NO_VERIFY 環境變數可以繞過 Agent 環境變數的此問題,但在使用 go get 或 go mod download 時不起作用。
解決方案
解決此問題頒發並啟用安全性憑證驗證後,您可以使用 openssl 將必要的憑證匯入系統的 CA 儲存體中。例如:
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 # Proceed with your build process...
透過將憑證匯入 CA 存儲,為 git 依賴項檢索啟用安全性憑證驗證。
範例
以下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 將導入必要的憑證並更新CA 存儲,從而允許在專用網路中建置Go 應用程式的相依性檢索期間進行安全性憑證驗證。
以上是如何修復 Docker 多階段 Go 映像建置中的「x509:憑證由未知機構簽署」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!