Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengesahkan menggunakan repositori peribadi dalam bekas Docker

Bagaimana untuk mengesahkan menggunakan repositori peribadi dalam bekas Docker

WBOY
WBOYke hadapan
2024-02-09 09:40:19600semak imbas

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

editor php Strawberry memperkenalkan anda cara menggunakan repositori peribadi dalam bekas Docker untuk pengesahan. Docker ialah platform kontena popular yang membantu pembangun menggunakan dan menjalankan aplikasi dengan cepat dalam persekitaran yang berbeza. Walau bagaimanapun, untuk sesetengah aplikasi sensitif atau pangkalan kod peribadi, kami mungkin perlu mengesahkan repositori dalam bekas untuk memastikan bahawa hanya kakitangan yang diberi kuasa boleh mengaksesnya. Artikel ini akan menunjukkan kepada anda cara menyediakan dan menggunakan pengesahan untuk repositori peribadi untuk melindungi data dan kod sensitif anda.

Kandungan soalan

Saya mempunyai repositori git yang merupakan repositori peribadi dan saya perlu dapat mengesahkannya dan dapat menjalankannya dalam container build 视角中查看它。有关一些背景信息,我有一个 github 工作流程,用于构建容器映像并将其发布到 ghcr.io pendaftaran. Walau bagaimanapun, kerana repositori yang bergantung pada pakej saya adalah peribadi, ia tidak berfungsi. Memandangkan ia berfungsi secara tempatan, saya telah mempertimbangkan untuk mengubah cara pengesahan github disimpan untuk membolehkan saya mengaksesnya, tetapi saya tertanya-tanya sama ada sesiapa tahu cara yang lebih baik untuk saya mengakses repositori peribadi. p>

Berikut ialah tindakan github untuk diterbitkan ke ghcr.io pendaftaran:

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

Ini ialah 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" ]

Saya rasa bahagian besar yang mengelirukan saya ialah ini, tetapi tertanya-tanya jika ada cara yang lebih baik untuk melakukannya:

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

Cara untuk mengakses repositori peribadi dan mengelakkan ralat berikut dalam aliran kerja anda:

#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

Penyelesaian

Dalam dockerfile 中,为了使用操作传递的密钥(称为 token, untuk menggunakan kunci yang diluluskan oleh operasi (dipanggil token), anda harus menjalankan seperti berikut:

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

Ingat untuk menghantar github_id ke fail docker juga

Atas ialah kandungan terperinci Bagaimana untuk mengesahkan menggunakan repositori peribadi dalam bekas Docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam