Heim  >  Artikel  >  Backend-Entwicklung  >  So authentifizieren Sie sich mithilfe eines privaten Repositorys in einem Docker-Container

So authentifizieren Sie sich mithilfe eines privaten Repositorys in einem Docker-Container

WBOY
WBOYnach vorne
2024-02-09 09:40:19600Durchsuche

如何使用 Docker 容器中的私有存储库进行身份验证

php-Editor Strawberry stellt Ihnen vor, wie Sie ein privates Repository in einem Docker-Container zur Authentifizierung verwenden. Docker ist eine beliebte Containerisierungsplattform, die Entwicklern hilft, Anwendungen schnell in verschiedenen Umgebungen bereitzustellen und auszuführen. Bei einigen sensiblen Anwendungen oder privaten Codebasen müssen wir jedoch möglicherweise das Repository im Container authentifizieren, um sicherzustellen, dass nur autorisiertes Personal darauf zugreifen kann. In diesem Artikel erfahren Sie, wie Sie die Authentifizierung für private Repositorys einrichten und verwenden, um Ihre sensiblen Daten und Ihren Code zu schützen.

Frageninhalt

Ich habe ein Git-Repository, das ein privates Repository ist, und ich muss mich bei diesem authentifizieren und es in der container build 视角中查看它。有关一些背景信息,我有一个 github 工作流程,用于构建容器映像并将其发布到 ghcr.io-Registrierung ausführen können. Da das Repository, von dem mein Paket abhängt, jedoch privat ist, funktioniert es nicht. Da es nun lokal funktioniert, habe ich darüber nachgedacht, die Art und Weise, wie die Github-Authentifizierung gespeichert wird, zu ändern, um mir den Zugriff darauf zu ermöglichen, aber ich habe mich gefragt, ob jemand eine bessere Möglichkeit für mich kennt, auf das private Repository zuzugreifen. p>

Das Folgende ist die Github-Aktion zum Veröffentlichen in der ghcr.io-Registrierung:

name: docker dataeng_github_metrics

# run workflow on tags starting with v (eg. v2, v1.2.0)
on:
  push:
    branches: [ "master" ]
    paths:
      - ./data_pipelines/dataeng_github_metrics/*
  pull_request:
    branches: [ "master" ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v1
        
      - name: login to github container registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.ghcr_registry_token }}

      - name: set up docker buildx
        uses: docker/setup-buildx-action@v2

      - name: build and push docker image
        uses: docker/build-push-action@v3
        with:
          context: ./data_pipelines/dataeng_github_metrics/
          file: ./data_pipelines/dataeng_github_metrics/dockerfile
          push: true # will only build if this is not here
          tags: |
            ghcr.io/mirantis/dataeng_github_metrics:latest
          # todo: i cannot use dataeng as public and need to change the way gitconfig is used in the dockerfile for authentication
          secrets: |
            token=${{ secrets.automation_pat}}

Das ist dockerfile:

###############
# cache image #
###############
arg go_image=golang:1.17.3-alpine3.14
arg base_image=alpine:3.14.2

from ${go_image} as cache
# add the keys
arg github_id
env github_id=$github_id
arg github_token
env github_token=$github_token

# install git
run apk add git

# todo: encrypt the github_id and github_token
# make git configuration
run git config \
    --global \
    url."https://${github_id}:${github_token}@github.com/".insteadof \
    "https://github.com/"

workdir /src
copy go.mod go.sum /src/
run go mod download

##############
# base image #
##############
from cache as dataeng_github_metrics
copy . /bin
workdir /bin

# setup git terminal prompt & go build
run go build .

###############
# final image #
###############
from ${base_image}
copy --from=dataeng_github_metrics /bin/dataeng_github_metrics bin/
entrypoint [ "bin/dataeng_github_metrics" ]

Ich denke, der größte Teil, der mich verwirrt, ist dieser, aber ich frage mich, ob es einen besseren Weg gibt, es zu tun:

# make git configuration
run git config \
    --global \
    url."https://${github_id}:${github_token}@github.com/".insteadof \
    "https://github.com/"

So greifen Sie auf private Repositories zu und vermeiden die folgenden Fehler in Ihrem Workflow:

#14 9.438   remote: Repository not found.
#14 9.438   fatal: Authentication failed for 'https://github.com/Mirantis/dataeng/'
------
Dockerfile:26
--------------------
  24 |     WORKDIR /src
  25 |     COPY go.mod go.sum /src/
  26 | >>> RUN go mod download
  27 |     
  28 |     ##############
--------------------
ERROR: failed to solve: process "/bin/sh -c go mod download" did not complete successfully: exit code: 1
Error: buildx failed with: ERROR: failed to solve: process "/bin/sh -c go mod download" did not complete successfully: exit code: 1

Workaround

In dockerfile 中,为了使用操作传递的密钥(称为 token sollten Sie Folgendes ausführen, um den von der Operation übergebenen Schlüssel (genannt token) zu verwenden:

RUN --mount=type=secret,id=TOKEN \
    echo "machine github.com login x password $(head -n 1 /run/secrets/TOKEN)" > ~/.netrc && \
git config \
    --global \
    url."https://${GITHUB_ID}:${TOKEN}@github.com/".insteadOf \
    "https://github.com/"

Denken Sie daran, github_id auch an die Docker-Datei zu übergeben

Das obige ist der detaillierte Inhalt vonSo authentifizieren Sie sich mithilfe eines privaten Repositorys in einem Docker-Container. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen