首頁 >後端開發 >Golang >如何使用 SSH 在 Docker 中使用私有 GitLab 模組建立 Go 應用程式?

如何使用 SSH 在 Docker 中使用私有 GitLab 模組建立 Go 應用程式?

Barbara Streisand
Barbara Streisand原創
2024-12-07 10:32:12284瀏覽

How to Build Go Apps with Private GitLab Modules in Docker using SSH?

在Docker 中使用私有GitLab 模組建立Go 應用

本指南旨在解決將私有GitLab 模組整合到Go 應用程式時面臨的特定挑戰在Docker 中。

了解問題

當 Dockerfile 嘗試從 GitLab 提取私有包,但儘管遵循類似的 GitHub 教程但身份驗證失敗時,就會出現此問題。這個具體問題源自於 GitHub 和 GitLab 的身份驗證機制之間的差異。

建議的解決方案

為了解決這個問題,我們將利用基於 SSH 的身份驗證並採用 Docker 的實驗功能。

實驗性Docker功能

透過在Dockerfile 開頭加入以下註解來啟用實驗性Docker 功能:

# syntax=docker/dockerfile:experimental

Docker設定

    確保您的建置環境有openssh-client:
RUN apk --no-cache add build-base git mercurial gcc curl openssh-client
    建立known_hosts並且設定.git config:
RUN mkdir -p -m 0700 ~/.ssh && \
    ssh-keyscan gitlab.com >> ~/.ssh/known_hosts && \
    echo -e "[url \"[email&#160;protected]:<company-name>\"]\n\tinsteadOf = https://gitlab.com/<company-name>\"" >> ~/.gitconfig
    使用基於SSH的建立你的Go應用程式驗證:
ENV GO111MODULE=on
ENV GOPRIVATE=gitlab.com/<company-name>
RUN --mount=type=ssh cd cmd/app/ &amp;&amp; go build -o app

在ssh-agent 中載入金鑰

在建置Docker 映像之前,必須將私鑰載入到ssh-agent 中:

ssh-add id_rsa

建置Docker映像

建置Docker映像

DOCKER_BUILDKIT=1 docker build --progress=plain .

使用以下命令建置Docker鏡像:

偵錯SSH 連線

RUN ssh -A -v -l git gitlab.com

如果出現SSH 連線問題,請新增下列偵錯指令到您的Dockerfile:

解決AppArmor問題
/run/user/1000/keyring/ssh rw,

如果apparmor 阻止Docker 存取SSH 密鑰套接字,請編輯apparmor 設定檔並在關閉}:

密鑰檔案名稱問題

確保私鑰檔案名稱是SSH 期望的預設值之一(例如id_rsa)或使用 .ssh/config 檔案將自訂金鑰名稱對應到預期的預設值。

附加說明避免使用 chmod授予權限,因為 SSH 金鑰條目足以共享私鑰。也建議避免使用 .netrc,因為它將憑證嵌入到 Docker 映像中,可能會危及安全性。

以上是如何使用 SSH 在 Docker 中使用私有 GitLab 模組建立 Go 應用程式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn