Hoppa till huvudinnehållet

Hämta images från Docker Hub via beroendeproxyn med din egen Docker Hub-token

fremforge hämtar inte images från Docker Hub åt dig med ett delat konto. Dockers villkor tillåter åtkomst för dina egna interna ändamål, och Docker Hub begränsar anonyma hämtningar per IP-adress, och den gränsen delas av alla bakom samma adress. Därför fungerar Docker Hub på samma sätt som GitLabs beroendeproxy och pull-through-cacharna i Amazon ECR: din organisation tar med sin egen Docker Hub-token, och beroendeproxyn hämtar och cachar images med den.

Du har sedan två sätt att hämta en image från Docker Hub:

VägImage-referensInloggningsuppgiftGränser
Via organisationens beroendeproxyfrem.sh/<org>/dependency-proxy/docker.io/<namespace>/<repository>:<tag>Organisationens Docker Hub-token, sparad en gångDitt Docker Hub-kontos gränser. En cachad image räknas inte mot Docker Hub igen.
Direkt från Docker Hubdocker.io/<namespace>/<repository>:<tag>Ingen (anonymt), eller din egen docker loginDocker Hubs gräns för anonyma hämtningar, per IP-adress

Runners som fremforge hostar använder inte längre en delad spegel av Docker Hub. Tills din organisation har sparat sin Docker Hub-token är en vanlig docker pull node:24 i ett workflow en anonym hämtning direkt från Docker Hub, som räknas mot Dockers gräns för runnerns adress. När token väl är sparad, och pull-through för runners är på (standard), skickar runnerns Docker-daemon hämtningar från Docker Hub i dina jobb via din proxy med den token, utan att image-namnen behöver ändras, utom i jobb från pull requests från forkar. Se Hostade runners.

Innan du börjar

  • Beroendeproxyn måste vara på för organisationen. Den finns i alla abonnemang och är på som standard; en ägare som har stängt av den slår på den igen under Organisation settings > Beroendeproxy (PUT /orgs/{org}/dependency-proxy med "enabled": true).
  • Du måste vara ägare av organisationen för att spara en inloggningsuppgift.

Skapa en åtkomsttoken för Docker Hub

  1. Logga in på Docker Hub med det konto som proxyn ska använda: ett tjänstekonto för ditt företag är bättre än en persons konto.
  2. Gå till Account settings > Personal access tokens och välj Generate new token.
  3. Namnge den efter var den används, till exempel fremforge dependency proxy, och sätt åtkomstbehörigheten till Public Repo Read-only. Proxyn läser bara.
  4. Kopiera token. Docker Hub visar den en gång.

En åtkomsttoken för en Docker Hub-organisation fungerar på samma sätt.

Spara den som organisationens inloggningsuppgift för upstream docker.io

I konsolen: Organisationens administration > Beroendeproxy > Inloggningsuppgifter för upstream, under Lägg till inloggningsuppgifter. Välj registret docker.io, sätt Inloggningssätt till Användarnamn och lösenord eller token, ange användarnamnet på Docker Hub och token som lösenord, och välj Lägg till. Testa anslutningen låter proxyn logga in på Docker Hub med den direkt.

Med API:t (en token med policy:write, som tillhör en organisationsägare):

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 innehåller inloggningsuppgiftens id och ett fingeravtryck, aldrig hemligheten. Testa den med POST /orgs/<org>/dependency-proxy/upstreams/<id>/test, stäng av den eller byt hemligheten med PATCH /orgs/<org>/dependency-proxy/upstreams/<id>, och ta bort den med DELETE.

Hemligheten går bara att skriva: den förseglas när den sparas och returneras, loggas eller skrivs aldrig till granskningsloggen. Granskningsloggen registrerar vem som lade till, ändrade eller tog bort inloggningsuppgiften.

Hämta via proxyn

Logga in på frem.sh med ditt användarnamn i fremforge och en personlig åtkomsttoken som har read:package, och hämta sedan med beroendeproxyns prefix:

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

Officiella images ligger under library/ på Docker Hub, så node:24 blir frem.sh/<org>/dependency-proxy/docker.io/library/node:24. Andra images behåller sin namnrymd: pgvector/pgvector:pg17 blir frem.sh/<org>/dependency-proxy/docker.io/pgvector/pgvector:pg17.

Du kan också hämta via digest, och en fastlåst digest för flera plattformar fungerar oförändrad:

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

I Forgejo Actions

Ett jobb kan logga in med sin egen jobbtoken. Det hämtar bara via beroendeproxyn för den organisation som äger jobbets 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 Dockerfilens FROM-rader använder prefixet frem.sh/<org>/dependency-proxy/docker.io/ hämtar bygget via proxyn med den inloggningen.

Ett jobb som startas av en pull request från en fork körs aldrig med organisationens inloggningsuppgifter, så det kan inte hämta images från docker.io via proxyn. Hämta dem direkt från Docker Hub.

Utan inloggningsuppgift

Om din organisation inte har någon aktiverad inloggningsuppgift för docker.io svarar en hämtning via proxyn med 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

Proxyn faller inte tillbaka på en anonym hämtning från Docker Hub. Spara antingen en inloggningsuppgift, eller referera till imagen direkt (docker.io/...), vilket är en anonym hämtning under Docker Hubs gräns för anonyma hämtningar.

Andra register beter sig annorlunda: ghcr.io och quay.io fungerar anonymt via proxyn när du inte har någon inloggningsuppgift för dem, och använder din när du har en.

Kontrollera att det fungerar

  • Hämta en image via proxyn och titta sedan på sidan Usage i ditt Docker Hub-konto: hämtningen räknas där, en gång. En andra hämtning av samma image levereras från cachen.
  • Om en hämtning misslyckas med 503 och your organisation’s docker.io credential could not be used gick det inte att öppna den sparade inloggningsuppgiften. Det är ett fel hos fremforge, och det loggas.