Gå til hovedindhold

Hent Docker Hub-images gennem afhængighedsproxyen med dit eget Docker Hub-token

fremforge henter ikke Docker Hub-images på dine vegne med en delt konto. Dockers vilkår tillader adgang til dine egne interne formål, og Docker Hub begrænser anonyme pulls pr. IP-adresse, delt af alle bag den adresse. Derfor virker Docker Hub på samme måde som GitLabs afhængighedsproxy og Amazon ECR’s pull-through-caches: din organisation medbringer sit eget Docker Hub-token, og afhængighedsproxyen henter og cacher images med det.

Du har så to måder at hente et Docker Hub-image på:

VejImage-referenceLegitimationsoplysningerGrænser
Gennem din organisations afhængighedsproxyfrem.sh/<org>/dependency-proxy/docker.io/<namespace>/<repository>:<tag>Din organisations Docker Hub-token, gemt én gangDin Docker Hub-kontos grænser. Et cachet image tæller ikke mod Docker Hub igen.
Direkte fra Docker Hubdocker.io/<namespace>/<repository>:<tag>Ingen (anonymt) eller dit eget docker loginDocker Hubs grænse for anonyme pulls pr. IP-adresse

Runnere hostet af fremforge bruger ikke længere et delt Docker Hub-mirror. Indtil din organisation har gemt sit Docker Hub-token, er et almindeligt docker pull node:24 i et workflow et anonymt pull direkte fra Docker Hub, som tæller mod Dockers grænse for runnerens adresse. Når tokenet er gemt, og runner-pull-through er slået til (standard), sender runnerens Docker-daemon Docker Hub-pulls i dine jobs gennem din proxy med det token, uden at image-navnene skal ændres, undtagen i jobs fra pull requests fra forks. Se Hostede runnere.

Før du starter

  • Afhængighedsproxyen skal være slået til for organisationen. Den findes på alle planer og er slået til som standard; en ejer, der har slået den fra, slår den til igen under **Organisation settings

    Afhængighedsproxy** (PUT /orgs/{org}/dependency-proxy med "enabled": true).

  • Du skal være ejer af organisationen for at gemme legitimationsoplysninger.

Opret et adgangstoken til Docker Hub

  1. Log ind på Docker Hub med den konto, proxyen skal bruge: en servicekonto i din virksomhed er bedre end en persons konto.
  2. Gå til Account settings > Personal access tokens, og vælg Generate new token.
  3. Navngiv det efter, hvor det bruges, for eksempel fremforge dependency proxy, og sæt adgangsrettighederne til Public Repo Read-only. Proxyen læser kun.
  4. Kopiér tokenet. Docker Hub viser det kun én gang.

Et organisationsadgangstoken fra en Docker Hub-organisation virker på samme måde.

Gem det som din organisations upstream-legitimationsoplysninger for docker.io

I konsollen: Administration > Afhængighedsproxy > Upstream-legitimationsoplysninger under Tilføj legitimationsoplysninger. Vælg registret docker.io, sæt Sådan logger den ind til Brugernavn og adgangskode eller token, indtast Docker Hub-brugernavnet og tokenet som adgangskode, og vælg Tilføj. Test forbindelsen får proxyen til at logge ind på Docker Hub med dem med det samme.

Med API’et (et token med policy:write fra en ejer af organisationen):

curl -sS -X POST "https://frem.sh/_app/api/v1/orgs/<org>/dependency-proxy/upstreams" \
  -H "Authorization: Bearer $FREMFORGE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"host": "docker.io", "auth_type": "basic", "username": "<docker-hub-user>", "password": "<docker-hub-token>"}'

Svaret indeholder legitimationsoplysningernes id og et fingeraftryk, aldrig selve hemmeligheden. Test dem med POST /orgs/<org>/dependency-proxy/upstreams/<id>/test, slå dem fra eller udskift hemmeligheden med PATCH /orgs/<org>/dependency-proxy/upstreams/<id>, og fjern dem med DELETE.

Hemmeligheden kan kun skrives: den forsegles, når den gemmes, og returneres, logges eller skrives aldrig til revisionsloggen. Revisionsloggen registrerer, hvem der tilføjede, ændrede eller fjernede legitimationsoplysningerne.

Hent gennem proxyen

Log ind på frem.sh med dit fremforge-brugernavn og et personligt adgangstoken med read:package, og hent derefter med afhængighedsproxyens præfiks:

docker login frem.sh -u <your-user>
docker pull frem.sh/<org>/dependency-proxy/docker.io/library/node:24-bookworm-slim

Officielle images ligger under library/ på Docker Hub, så node:24 er frem.sh/<org>/dependency-proxy/docker.io/library/node:24. Andre images beholder deres namespace: pgvector/pgvector:pg17 er frem.sh/<org>/dependency-proxy/docker.io/pgvector/pgvector:pg17.

Du kan også hente via digest, og et fastlåst digest for flere platforme virker uændret:

FROM frem.sh/<org>/dependency-proxy/docker.io/library/node:24-bookworm-slim@sha256:<digest>

I Forgejo Actions

Et job kan logge ind med sit eget jobtoken. Det henter kun gennem afhængighedsproxyen i den organisation, dets eget repository tilhører.

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: log in to the dependency proxy
        run: echo "${{ github.token }}" | docker login frem.sh -u "${{ github.actor }}" --password-stdin
      - run: docker build -t app .

Når Dockerfilens FROM-linjer bruger præfikset frem.sh/<org>/dependency-proxy/docker.io/, henter buildet gennem proxyen med det login.

Et job, der udløses af en pull request fra en fork, kører aldrig med din organisations legitimationsoplysninger, så det kan ikke hente docker.io-images gennem proxyen. Hent dem direkte fra Docker Hub.

Uden legitimationsoplysninger

Hvis din organisation ikke har aktive legitimationsoplysninger for docker.io, svarer et pull gennem proxyen 403 DENIED:

docker.io needs your organisation's own Docker Hub credentials (decision D1): an organisation
owner adds them under Organisation settings > Dependency proxy > Upstream credentials

Proxyen falder ikke tilbage til et anonymt pull fra Docker Hub. Gem enten legitimationsoplysninger, eller referér direkte til imaget (docker.io/...), hvilket er et anonymt pull under Docker Hubs grænse for anonyme pulls.

Andre registre opfører sig anderledes: ghcr.io og quay.io virker anonymt gennem proxyen, når du ikke har legitimationsoplysninger til dem, og bruger dine, når du har.

Tjek, at det virker

  • Hent et image gennem proxyen, og se derefter på siden Usage for din Docker Hub-konto: pullet tælles dér, én gang. Et andet pull af samme image udleveres fra cachen.
  • Hvis et pull fejler med 503 og your organisation’s docker.io credential could not be used, kunne de gemte legitimationsoplysninger ikke åbnes. Det er en fejl hos fremforge, og den bliver logget.