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äg | Image-referens | Inloggningsuppgift | Gränser |
|---|---|---|---|
| Via organisationens beroendeproxy | frem.sh/<org>/dependency-proxy/docker.io/<namespace>/<repository>:<tag> | Organisationens Docker Hub-token, sparad en gång | Ditt Docker Hub-kontos gränser. En cachad image räknas inte mot Docker Hub igen. |
| Direkt från Docker Hub | docker.io/<namespace>/<repository>:<tag> | Ingen (anonymt), eller din egen docker login | Docker 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-proxymed"enabled": true). - Du måste vara ägare av organisationen för att spara en inloggningsuppgift.
Skapa en åtkomsttoken för Docker Hub
- 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.
- Gå till Account settings > Personal access tokens och välj Generate new token.
- 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. - 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-slimOfficiella 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 credentialsProxyn 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
503och 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.