Docker でプライベート GitLab モジュールを使用した Go アプリの構築
このガイドは、プライベート GitLab モジュールを Go アプリケーションに統合するときに直面する特定の課題に対処することを目的としていますDocker 内。
問題
この問題は、Dockerfile が GitLab からプライベート パッケージをプルしようとしたときに、GitHub の同様のチュートリアルに従っているにもかかわらず認証に失敗したときに発生します。この特定の問題は、GitHub と GitLab の認証メカニズムの違いに起因します。
提案された解決策
この問題を解決するには、SSH ベースの認証を利用し、Docker の実験的認証を採用します。機能。
実験的な Docker機能
Dockerfile の先頭に次のコメントを追加して、実験的な Docker 機能を有効にします:
# syntax=docker/dockerfile:experimental
Dockerfile Setup
RUN apk --no-cache add build-base git mercurial gcc curl openssh-client
RUN mkdir -p -m 0700 ~/.ssh && \ ssh-keyscan gitlab.com >> ~/.ssh/known_hosts && \ echo -e "[url \"[email protected]:<company-name>\"]\n\tinsteadOf = https://gitlab.com/<company-name>\"" >> ~/.gitconfig
ENV GO111MODULE=on ENV GOPRIVATE=gitlab.com/<company-name> RUN --mount=type=ssh cd cmd/app/ && go build -o app
ssh-agent にキーをロード
Docker イメージをビルドする前に、秘密キーを ssh-agent にロードする必要があります。
ssh-add id_rsa
Docker の構築イメージ
次のコマンドを使用して Docker イメージをビルドします。
DOCKER_BUILDKIT=1 docker build --progress=plain .
SSH 接続のデバッグ
SSH 接続の問題が発生した場合は、次のコマンドを追加します。次のデバッグコマンドをDockerfile:
RUN ssh -A -v -l git gitlab.com
AppArmor の問題の解決
AppArmor が SSH キー ソケットへの Docker のアクセスをブロックしている場合は、AppArmor プロファイルを編集し、次の行を閉じる }:
/run/user/1000/keyring/ssh rw,
キー ファイル名
秘密キーのファイル名が SSH が予期するデフォルト値 (id_rsa など) の 1 つであることを確認するか、.ssh/config ファイルを使用してカスタム キー名を予期されるデフォルトにマップします。
追加の注意事項
許可するために chmod を使用しないでください秘密キーを共有するには SSH キーのエントリで十分であるため、権限が必要です。また、.netrc は Docker イメージに認証情報を埋め込み、セキュリティを損なう可能性があるため、使用しないことをお勧めします。
以上がSSH を使用して Docker でプライベート GitLab モジュールを使用して Go アプリを構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。