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å:
| Vej | Image-reference | Legitimationsoplysninger | Grænser |
|---|---|---|---|
| Gennem din organisations afhængighedsproxy | frem.sh/<org>/dependency-proxy/docker.io/<namespace>/<repository>:<tag> | Din organisations Docker Hub-token, gemt én gang | Din Docker Hub-kontos grænser. Et cachet image tæller ikke mod Docker Hub igen. |
| Direkte fra Docker Hub | docker.io/<namespace>/<repository>:<tag> | Ingen (anonymt) eller dit eget docker login | Docker 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-proxymed"enabled": true). - Du skal være ejer af organisationen for at gemme legitimationsoplysninger.
Opret et adgangstoken til Docker Hub
- Log ind på Docker Hub med den konto, proxyen skal bruge: en servicekonto i din virksomhed er bedre end en persons konto.
- Gå til Account settings > Personal access tokens, og vælg Generate new token.
- Navngiv det efter, hvor det bruges, for eksempel
fremforge dependency proxy, og sæt adgangsrettighederne til Public Repo Read-only. Proxyen læser kun. - 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-slimOfficielle 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 credentialsProxyen 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
503og 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.