Maison  >  Article  >  développement back-end  >  Comment s'authentifier à l'aide d'un référentiel privé dans un conteneur Docker

Comment s'authentifier à l'aide d'un référentiel privé dans un conteneur Docker

WBOY
WBOYavant
2024-02-09 09:40:19598parcourir

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

l'éditeur php Strawberry vous présente comment utiliser un référentiel privé dans un conteneur Docker pour l'authentification. Docker est une plate-forme de conteneurisation populaire qui aide les développeurs à déployer et exécuter rapidement des applications dans différents environnements. Cependant, pour certaines applications sensibles ou bases de codes privées, nous devrons peut-être authentifier le référentiel dans le conteneur pour garantir que seul le personnel autorisé puisse y accéder. Cet article vous montrera comment configurer et utiliser l'authentification pour les référentiels privés afin de protéger vos données et votre code sensibles.

Contenu de la question

J'ai un référentiel git qui est un référentiel privé et je dois pouvoir m'authentifier auprès de celui-ci et pouvoir l'exécuter dans le container build 视角中查看它。有关一些背景信息,我有一个 github 工作流程,用于构建容器映像并将其发布到 ghcr.io registre. Cependant, comme le référentiel dont dépend mon package est privé, cela ne fonctionne pas. Maintenant que cela fonctionne localement, j'ai envisagé de changer la façon dont l'authentification github est stockée pour me permettre d'y accéder, mais je me demandais si quelqu'un connaissait un meilleur moyen pour moi d'accéder au référentiel privé. p>

Voici l'action github à publier dans le registre ghcr.io :

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}}

C'est 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" ]

Je pense que la grande partie qui me déroute est la suivante, mais je me demande s'il existe une meilleure façon de le faire :

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

Comment accéder aux référentiels privés et éviter les erreurs suivantes dans votre 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

Solution de contournement

Dans dockerfile 中,为了使用操作传递的密钥(称为 token, afin d'utiliser la clé transmise par l'opération (appelée token), vous devez exécuter comme suit :

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/"

N'oubliez pas de transmettre également github_id au dockerfile

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer