Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membetulkan Ralat \"x509: Sijil Ditandatangani oleh Pihak Berkuasa Tidak Diketahui\" dalam Docker Multi-Stage Build for Go Projects?

Bagaimana untuk Membetulkan Ralat \"x509: Sijil Ditandatangani oleh Pihak Berkuasa Tidak Diketahui\" dalam Docker Multi-Stage Build for Go Projects?

Susan Sarandon
Susan Sarandonasal
2024-11-04 00:23:30627semak imbas

How to Fix

Pembinaan Berbilang Peringkat Docker: Menyelesaikan Ralat "x509: Sijil Ditandatangani oleh Pihak Berkuasa Tidak Diketahui"

Apabila cuba membina imej Docker untuk Masuk rangkaian korporat persendirian menggunakan binaan berbilang peringkat, ralat "x509: sijil ditandatangani oleh pihak berkuasa yang tidak diketahui" mungkin timbul. Isu ini berpunca daripada isu sijil dan pengesahan semasa mendapatkan semula kebergantungan Go.

Memahami Masalah:

Ralat berlaku kerana git, yang digunakan oleh Go to access dependencies, menggunakan curl. Ini memerlukan sijil yang diperlukan untuk diimport ke dalam stor CA sistem. Pada mulanya, dicadangkan untuk menggunakan pembolehubah persekitaran GIT_SSL_NO_VERIFY=1, tetapi pendekatan ini terbukti tidak berkesan untuk mendapatkan kebergantungan.

Penyelesaian: Mengimport Sijil ke dalam Kedai CA

Untuk menyelesaikan isu ini, adalah perlu untuk mengimport sijil yang berkaitan ke dalam stor CA sistem. Kaedah untuk berbuat demikian berbeza-beza bergantung pada OS, tetapi secara amnya melibatkan penggunaan arahan openssl.

Sebagai contoh, dalam sistem berasaskan Debian, arahan berikut boleh digunakan:

  1. apt-get update && apt-get install -y ca-certificates openssl
  2. openssl s_client -showcerts -connect github.com:443 /dev/null | openssl x509 -outform PEM > /usr/local/share/ca-certificates/github.crt (untuk sijil GitHub)
  3. openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | openssl x509 -outform PEM > /usr/local/share/ca-certificates/proxy.golang.crt (untuk sijil proxy.golang.org)
  4. kemas kini-ca-certificates

Fail Docker yang diubah suai :

Dengan memasukkan langkah pengimportan sijil ini ke dalam Dockerfile, isu itu boleh diselesaikan, membolehkan kebergantungan diperoleh dan binaan diteruskan dengan jayanya. Di bawah ialah fail Docker yang dikemas kini:

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"]

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \"x509: Sijil Ditandatangani oleh Pihak Berkuasa Tidak Diketahui\" dalam Docker Multi-Stage Build for Go Projects?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn