Docker マルチステージ ビルド: 「x509: 不明な機関によって署名された証明書」エラーの解決
Go in 用の Docker イメージをビルドしようとしたとき多段階ビルドを使用するプライベート企業ネットワークでは、「x509: 不明な認証局によって署名された証明書」というエラーが発生する場合があります。この問題は、Go の依存関係を取得する際の証明書と認証の問題が原因で発生します。
問題の理解:
このエラーは、Go が依存関係にアクセスするために使用される git が原因で発生します。カールを利用します。これには、必要な証明書をシステムの CA ストアにインポートする必要があります。当初、環境変数 GIT_SSL_NO_VERIFY=1 を使用することが提案されましたが、このアプローチは依存関係を取得するには効果的ではないことが判明しました。
解決策: CA ストアへの証明書のインポート
この問題を解決するには、関連する証明書をシステムの CA ストアにインポートする必要があります。これを行う方法は OS によって異なりますが、通常は openssl コマンドを使用します。
たとえば、Debian ベースのシステムでは、次のコマンドを使用できます:
変更された Dockerfile :
これらの証明書インポート手順を Dockerfile に組み込むことで、問題が解決され、依存関係を取得してビルドを正常に続行できるようになります。以下は更新された 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"]
以上がGo プロジェクトの Docker マルチステージ ビルドでの「x509: 不明な機関によって署名された証明書」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。