首頁 > 後端開發 > Golang > 主體

如何解決 Docker Multi-Stage Go Image Build 中的「x509:憑證由未知機構簽署」錯誤?

Patricia Arquette
發布: 2024-11-04 03:05:02
原創
878 人瀏覽過

How to Resolve

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

在私有企業網路中,它由於缺乏受信任的證書,在嘗試使用多階段建構來建立Go 鏡像時,經常會遇到「x509:由未知權威機構簽署的憑證」錯誤用於存取外部依賴項。

根本原因

出現此錯誤是因為 go get 和 go mod download 使用的 git 依賴 curl 來存取 HTTPS 伺服器。在專用網路中,系統 CA 儲存可能沒有必要的憑證來驗證這些伺服器的真實性。

解決方案

要解決此問題,您需要將所需的憑證匯入系統 CA 儲存。這可以使用openssl 命令來實現,如以下更新的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"]
登入後複製

驗證

應用此修復後,docker 映像建置應該繼續沒有「 x509:憑證由未知機構簽署」錯誤,因為必要的憑證現在已安裝在CA 儲存體中。

...

Step 5/19 : RUN openssl s_client -showcerts -connect github.com:443 </dev/null 2></dev/null|openssl x509 -outform PEM > ${cert_location}/github.crt
 ---> Running in bb797e26d4b4
Removing intermediate container bb797e26d4b4
 ---> 6c68ddafd884
Step 6/19 : RUN openssl s_client -showcerts -connect proxy.golang.org:443 </dev/null 2></dev/null|openssl x509 -outform PEM >  ${cert_location}/proxy.golang.crt
 ---> Running in 61f59939d75e
Removing intermediate container 61f59939d75e
 ---> 72d2b03b11e6
Step 7/19 : RUN update-ca-certificates
 ---> Running in 6cf9aa248776
Updating certificates in /etc/ssl/certs...
2 added, 0 removed; done.

...

Step 8/18 : COPY go.mod go.sum ./
 ---> 436263b76050
Step 9/18 : RUN go mod download
 ---> Running in 2387c78147db
Removing intermediate container 2387c78147db
 ---> a37c05c2b531
Step 10/18 : COPY . .
 ---> 01b49c388f59

...
登入後複製

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!