Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menyelesaikan Ralat \"x509: sijil ditandatangani oleh pihak berkuasa yang tidak diketahui\" dalam Imej Docker Multi-Stage Build Go?
Imej Docker Multi-Stage Build Go dengan Isu Kuasa Sijil
Masalah:
Bila cuba membina imej Go dalam rangkaian syarikat persendirian menggunakan binaan berbilang peringkat Docker, anda mungkin menghadapi ralat yang menyatakan "x509: sijil ditandatangani oleh pihak berkuasa yang tidak diketahui." Ini berlaku apabila Git cuba mendapatkan semula kebergantungan daripada pelayan HTTPS selamat.
Punca:
Isu ini berpunca daripada kekurangan sijil yang diperlukan dalam stor CA sistem, menyebabkan Git untuk menolak sambungan HTTPS.
Penyelesaian:
Untuk menyelesaikan isu ini, sijil yang hilang perlu diimport ke dalam stor CA sistem menggunakan OpenSSL. Berikut ialah contoh Fail Docker yang menunjukkan cara untuk mencapainya:
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"]
Penjelasan:
Fail Docker ini termasuk beberapa langkah tambahan berbanding dengan yang asal. Ia mula-mula memasang OpenSSL dan mengemas kini sijil CA sistem. Kemudian, ia menggunakan OpenSSL untuk mendapatkan semula sijil daripada "github.com" dan "proxy.golang.org" dan mengimportnya ke dalam gedung CA. Akhir sekali, ia mengemas kini sijil, membolehkan Git berjaya mendapatkan semula kebergantungan semasa arahan muat turun mod go.
Nota:
Daripada mengedit fail Docker untuk mengimport sijil, anda juga boleh menetapkan pembolehubah persekitaran GIT_SSL_NO_VERIFY=1 pada pembolehubah persekitaran ejen anda. Walau bagaimanapun, pendekatan ini tidak disyorkan untuk kegunaan pengeluaran kerana ia melumpuhkan pengesahan SSL.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \"x509: sijil ditandatangani oleh pihak berkuasa yang tidak diketahui\" dalam Imej Docker Multi-Stage Build Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!