在Docker 中使用私有GitLab 模組建立Go 應用
本指南旨在解決將私有GitLab 模組整合到Go 應用程式時面臨的特定挑戰在Docker 中。
了解問題
當 Dockerfile 嘗試從 GitLab 提取私有包,但儘管遵循類似的 GitHub 教程但身份驗證失敗時,就會出現此問題。這個具體問題源自於 GitHub 和 GitLab 的身份驗證機制之間的差異。
建議的解決方案
為了解決這個問題,我們將利用基於 SSH 的身份驗證並採用 Docker 的實驗功能。
實驗性Docker功能
透過在Dockerfile 開頭加入以下註解來啟用實驗性Docker 功能:
# syntax=docker/dockerfile:experimental
Docker設定
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 .
使用以下命令建置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中文網其他相關文章!