Gå til hovedinnhold

Pull Docker Hub-imager gjennom avhengighetsproxyen med ditt eget Docker Hub-token

fremforge puller ikke Docker Hub-imager på dine vegne med en delt konto. Dockers vilkår tillater tilgang for dine egne interne formål, og Docker Hub begrenser anonyme pulls per IP-adresse, delt mellom alle bak den adressen. Derfor fungerer Docker Hub slik avhengighetsproxyen i GitLab og pull-through-bufrene i Amazon ECR gjør det: organisasjonen din tar med sitt eget Docker Hub-token, og avhengighetsproxyen puller og bufrer imager med det.

Du har da to måter å pulle et Docker Hub-image på:

VeiImage-referanseLegitimasjonGrenser
Gjennom organisasjonens avhengighetsproxyfrem.sh/<org>/dependency-proxy/docker.io/<namespace>/<repository>:<tag>Organisasjonens Docker Hub-token, lagret én gangGrensene for Docker Hub-kontoen din. Et bufret image teller ikke mot Docker Hub igjen.
Direkte fra Docker Hubdocker.io/<namespace>/<repository>:<tag>Ingen (anonym), eller din egen docker loginDocker Hubs grense for anonyme pulls, per IP-adresse

Runnere som hostes av fremforge, bruker ikke lenger et delt Docker Hub-speil. Inntil organisasjonen din har lagret Docker Hub-tokenet sitt, er en vanlig docker pull node:24 i en workflow en anonym pull rett fra Docker Hub, som teller mot Dockers grense for runnerens adresse. Når tokenet er lagret, og pull-through for runnere er på (standard), sender runnerens Docker-daemon Docker Hub-pulls i jobbene dine gjennom proxyen din med det tokenet, uten noen endring i image-navnene, unntatt i jobber fra pull requests fra forks. Se Hostede runnere.

Før du begynner

  • Avhengighetsproxyen må være på for organisasjonen. Den er tilgjengelig i alle planer og på som standard; en eier som har slått den av, slår den på igjen under Organisation settings > Dependency proxy (PUT /orgs/{org}/dependency-proxy med "enabled": true).
  • Du må være eier av organisasjonen for å lagre en legitimasjon.

Opprett et tilgangstoken for Docker Hub

  1. Logg inn på Docker Hub med kontoen proxyen skal bruke: en tjenestekonto i bedriften din er bedre enn en persons konto.
  2. Gå til Account settings > Personal access tokens og velg Generer nytt token.
  3. Gi det et navn etter hvor det brukes, for eksempel fremforge dependency proxy, og sett tilgangen til Public Repo Read-only. Proxyen leser bare.
  4. Kopier tokenet. Docker Hub viser det én gang.

Et organisasjonstoken for en Docker Hub-organisasjon fungerer på samme måte.

Lagre det som organisasjonens upstream-legitimasjon for docker.io

I konsollen: Organisation settings > Dependency proxy > Upstream credentials, under Legg til påloggingsdetaljer. Velg registeret docker.io, sett Slik logger den inn til Username and password or token, skriv inn brukernavnet for Docker Hub og tokenet som passord, og velg Legg til påloggingsdetaljer. Test tilkoblingen får proxyen til å logge inn på Docker Hub med det med en gang.

Med API-et (et token med policy:write, tilhørende en eier av organisasjonen):

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 inneholder legitimasjonens id og et fingeravtrykk, aldri selve hemmeligheten. Test den med POST /orgs/<org>/dependency-proxy/upstreams/<id>/test, slå den av eller bytt ut hemmeligheten med PATCH /orgs/<org>/dependency-proxy/upstreams/<id>, og fjern den med DELETE.

Hemmeligheten kan bare skrives: den forsegles når den lagres, og blir aldri returnert, logget eller skrevet til revisjonsloggen. Revisjonsloggen registrerer hvem som la til, endret eller fjernet legitimasjonen.

Pull gjennom proxyen

Logg inn på frem.sh med fremforge-brukernavnet ditt og et personlig tilgangstoken som har read:package, og pull deretter med prefikset for avhengighetsproxyen:

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

Offisielle imager ligger under library/ på Docker Hub, så node:24 er frem.sh/<org>/dependency-proxy/docker.io/library/node:24. Andre imager beholder navnerommet sitt: pgvector/pgvector:pg17 er frem.sh/<org>/dependency-proxy/docker.io/pgvector/pgvector:pg17.

Du kan også pulle via digest, og en låst digest for flere plattformer virker uendret:

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

I Forgejo Actions

En jobb kan logge inn med sitt eget jobbtoken. Den puller bare gjennom avhengighetsproxyen til organisasjonen som eier jobbens eget repository.

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 FROM-linjene i Dockerfile bruker prefikset frem.sh/<org>/dependency-proxy/docker.io/, puller bygget gjennom proxyen med den innloggingen.

En jobb som er utløst av en pull request fra en fork, kjører aldri med organisasjonens legitimasjon, så den kan ikke pulle docker.io-imager gjennom proxyen. Pull dem direkte fra Docker Hub.

Uten legitimasjon

Hvis organisasjonen din ikke har en aktiv legitimasjon for docker.io, svarer en pull gjennom 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 faller ikke tilbake til en anonym pull fra Docker Hub. Enten lagrer du en legitimasjon, eller så refererer du direkte til imaget (docker.io/...), som er en anonym pull under Docker Hubs grense for anonyme pulls.

Andre registre oppfører seg annerledes: ghcr.io og quay.io virker anonymt gjennom proxyen når du ikke har noen legitimasjon for dem, og bruker din når du har det.

Kontroller at det virker

  • Pull et image gjennom proxyen, og se deretter på siden Forbruk for Docker Hub-kontoen din: pullen telles der, én gang. En ny pull av samme image leveres fra bufferen.
  • Hvis en pull feiler med 503 og your organisation’s docker.io credential could not be used, kunne ikke den lagrede legitimasjonen åpnes. Det er en feil hos fremforge, og den logges.