Go-Module, private Git-Repositories und Dockerfiles
Haben Sie Probleme beim Verweisen auf private Git-Repositories in Ihren Dockerfiles? In diesem Blogbeitrag werde ich erklären, was das Problem verursacht, und eine einfache Lösung anbieten, um es zu beheben.
Wie löst Go Module auf?
Beim Erstellen einer Anwendung löst Go die Module auf, indem es Folgendes überprüft:
- Erstens, wenn sich das Modul im lokalen Modulcache befindet.
- Wenn nicht, lädt es das Modul vom Go-Proxy-Server herunter, der ein globaler Cache für Go-Module ist, was schnellere und effizientere Builds ermöglicht. Wenn das Modul gefunden wird, speichert Go es im lokalen Modul-Cache.
- Wenn das Modul nicht auf dem Proxy vorhanden ist, wird es heruntergeladen und für nachfolgende Anforderungen verfügbar gemacht.
Module in privaten Git-Repositories werden niemals vom Go-Proxy-Server bereitgestellt. Das Modul kann nicht heruntergeladen werden, da es nicht über die erforderlichen Anmeldeinformationen verfügt.
In diesem Fall versucht Go, das Modul direkt herunterzuladen, indem es das private Git-Repository klont. Dazu werden die auf Ihrem Computer konfigurierten Git-Anmeldeinformationen verwendet.
Bevor versucht wird, das Modul aus dem Git-Repository abzurufen, versucht Go, den Proxy zu verwenden. Um dies zu verhindern, können Sie die GOPRIVATEUmgebungsvariable so setzen, dass sie Go anweist, alle Module unter einer bestimmten Domäne als privat zu behandeln. Zum Beispiel:
go env -w "GOPRIVATE=github.com/neha-viswanathan/*"
Was ist mit Dockerfiles?
Um Ihre Go-Binärdatei erfolgreich zu erstellen, die private Git-Module mit Docker umfasst, müssen Sie Git-Anmeldeinformationen für Ihren Docker-Build-Kontext bereitstellen. Dazu übergeben Sie diese Anmeldeinformationen als Build-Argument an Docker.
Wenn Sie beispielsweise GitHub verwenden, können Sie wie folgt ein persönliches Zugriffstoken als Anmeldeinformationen für Docker bereitstellen:
# the build argument to pass the credentials
ARG GITHUB_TOKEN
# git is needed to download private go modules directly from git repositories
RUN apk add git
# configure git with PAT to access the private repositories
RUN git config --global --add url."@github.com/neha-viswanathan/">https://${GITHUB_TOKEN}@github.com/neha-viswanathan/".insteadOf "https://github.com/neha-viswanathan/"
- Der
git configBefehl schreibt die URLs um, indem er die erforderlichen Anmeldeinformationen hinzufügt.
export GITHUB_TOKEN="my personal access"
docker build --build-arg GITHUB_TOKEN=${GITHUB_TOKEN} --no-cache -t image-name:tag .

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































