Imej Docker Multi-Stage Build Go: Menyelesaikan Ralat "x509: sijil ditandatangani oleh pihak berkuasa yang tidak diketahui"
Dalam rangkaian korporat persendirian, ia adalah perkara biasa untuk menghadapi ralat "x509: sijil yang ditandatangani oleh pihak berkuasa yang tidak diketahui" semasa cuba membina imej Go menggunakan binaan berbilang peringkat kerana kekurangan sijil yang dipercayai untuk mengakses kebergantungan luaran.
Punca Punca
Ralat ini berlaku kerana git, yang digunakan oleh muat turun mod go get dan go, bergantung pada curl untuk mengakses pelayan HTTPS. Dalam rangkaian persendirian, stor sistem CA mungkin tidak mempunyai sijil yang diperlukan untuk mengesahkan ketulenan pelayan ini.
Penyelesaian
Untuk menyelesaikan isu ini, anda perlu import sijil yang diperlukan ke dalam stor CA sistem. Ini boleh dicapai menggunakan arahan openssl, seperti yang ditunjukkan dalam fail Docker yang dikemas kini berikut:
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"]
Pengesahan
Selepas menggunakan pembetulan ini, binaan imej docker harus diteruskan tanpa ralat "x509: sijil ditandatangani oleh pihak berkuasa yang tidak diketahui" kerana sijil yang diperlukan kini dipasang di stor 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 ...
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'x509: sijil yang ditandatangani oleh pihak berkuasa yang tidak diketahui\' dalam Docker Multi-Stage Go Image Build?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!