ホームページ  >  記事  >  バックエンド開発  >  Go プロジェクトの Docker マルチステージ ビルドでの「x509: 不明な機関によって署名された証明書」エラーを修正する方法

Go プロジェクトの Docker マルチステージ ビルドでの「x509: 不明な機関によって署名された証明書」エラーを修正する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 00:23:30684ブラウズ

How to Fix

Docker マルチステージ ビルド: 「x509: 不明な機関によって署名された証明書」エラーの解決

Go in 用の Docker イメージをビルドしようとしたとき多段階ビルドを使用するプライベート企業ネットワークでは、「x509: 不明な認証局によって署名された証明書」というエラーが発生する場合があります。この問題は、Go の依存関係を取得する際の証明書と認証の問題が原因で発生します。

問題の理解:

このエラーは、Go が依存関係にアクセスするために使用される git が原因で発生します。カールを利用します。これには、必要な証明書をシステムの CA ストアにインポートする必要があります。当初、環境変数 GIT_SSL_NO_VERIFY=1 を使用することが提案されましたが、このアプローチは依存関係を取得するには効果的ではないことが判明しました。

解決策: CA ストアへの証明書のインポート

この問題を解決するには、関連する証明書をシステムの CA ストアにインポートする必要があります。これを行う方法は OS によって異なりますが、通常は openssl コマンドを使用します。

たとえば、Debian ベースのシステムでは、次のコマンドを使用できます:

  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 (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 (proxy.golang.org 証明書用)
  4. update-ca-certificates

変更された 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。