Docker hinter einem Proxy: Daemon, Build und Compose
Docker benötigt einen Proxy an drei verschiedenen Stellen — dem Daemon, der Bilder zieht, dem Build, der Befehle ausführt, und den Containern, die Sie ausführen. Setzen Sie den falschen und die Pulls schlagen weiterhin fehl. Hier ist jeder, korrekt zugeordnet.
Drei Schichten, drei Konfigurationen
Der Grund, warum "Ich habe http_proxy gesetzt, aber docker pull schlägt immer noch fehl" so häufig ist, liegt daran, dass Docker drei unabhängige Netzwerk-Kontexte hat und die Umgebungsvariablen deiner Shell nur einen davon berühren. Zuerst ist der Daemon (dockerd) das, was tatsächlich Bilder aus einem Registry zieht – er läuft als Systemdienst und liest seinen Proxy aus seiner eigenen Konfiguration, nicht aus deiner Shell. Zweitens läuft der Build jeden RUN Schritt in einem temporären Container, der seinen eigenen Proxy benötigt, um das Netzwerk zu erreichen. Drittens benötigt der laufende Container einen Proxy, wenn die Anwendung darin ausgehende Anrufe tätigt.
All three use the s4m HTTP endpoint on port 3128 with USER:PASS auth. The modern way to configure the daemon and build is the Docker client config file ~/.docker/config.json, which injects proxy settings into builds and docker run automatically; the daemon itself is configured via a systemd drop-in or Docker Desktop settings. See the proxy page; this pairs naturally with the npm/yarn and pip/conda guides for what runs inside your images.
Konfigurieren Sie alle drei Ebenen
Daemon über systemd Drop-in, baut und läuft über docker config.json und einen Compose-Fallback. Ersetze USER:PASS.
# --- 1) DAEMON (image pulls): systemd drop-in on Linux ---
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf >/dev/null <<'CONF'
[Service]
Environment="HTTP_PROXY=http://USER:PASS@proxy.s4m.online:3128"
Environment="HTTPS_PROXY=http://USER:PASS@proxy.s4m.online:3128"
Environment="NO_PROXY=localhost,127.0.0.1,.internal"
CONF
sudo systemctl daemon-reload && sudo systemctl restart docker
# --- 2) BUILDS + RUNS: ~/.docker/config.json (injected automatically) ---
cat > ~/.docker/config.json <<'JSON'
{
"proxies": {
"default": {
"httpProxy": "http://USER:PASS@proxy.s4m.online:3128",
"httpsProxy": "http://USER:PASS@proxy.s4m.online:3128",
"noProxy": "localhost,127.0.0.1,.internal"
}
}
}
JSON
# --- 3) docker-compose fallback (per-service build args) ---
# services:
# app:
# build:
# context: .
# args:
# HTTP_PROXY: http://USER:PASS@proxy.s4m.online:3128
# HTTPS_PROXY: http://USER:PASS@proxy.s4m.online:3128Docker pull und Build zum Laufen bringen
Beheben Sie die Schichten in der Reihenfolge, in der Fehler normalerweise auftreten.
Behebe zuerst den Daemon
Wenn docker pull fehlschlägt, kann der Daemon das Registry nicht erreichen. Füge den systemd Drop-in mit HTTP_PROXY/HTTPS_PROXY hinzu, dann daemon-reload und starte docker neu. In Docker Desktop setze den Proxy stattdessen in den Einstellungen.
Konfigurieren Sie den Client für Builds
Fügen Sie den Proxys-Block zu ~/.docker/config.json hinzu, damit docker build und docker run den Proxy automatisch in jeden Schritt und Container einfügen — keine Änderungen an der Dockerfile erforderlich.
Fügen Sie NO_PROXY überall hinzu
Fügen Sie localhost, 127.0.0.1 und jeden internen Registrierungs- oder Diensthost in NO_PROXY auf jeder Ebene hinzu, damit interner Verkehr nicht unnötig über den Proxy geleitet wird.
Überprüfen Sie jede Ebene
Testen Sie mit docker pull hello-world (Daemon), einem Build, der apt-get oder pip ausführt (Build), und einem Container, der einen IP-Echo-Endpunkt curlt (Laufzeit).
Umfang, Geheimnisse und Ehrlichkeit
Zwei Warnungen. Erstens, halten Sie Proxy-Anmeldeinformationen aus den Image-Schichten. Das Setzen von Proxy-Umgebungsvariablen innerhalb einer Dockerfile mit ENV backt sie in das Image; verwenden Sie stattdessen Build-Argumente oder die Client-config.json-Injektion, damit die Anmeldeinformationen auf dem Build-Host bleiben. Zweitens, seien Sie präzise mit NO_PROXY — ein fehlender Eintrag für ein internes Registry bedeutet, dass Docker versucht, es über den externen Proxy zu erreichen und verwirrend fehlschlägt.
s4m's HTTP-Proxy ist ein authentifizierter Rechenzentrum-Endpunkt, nach Verbrauch abgerechnet — gut geeignet für CI-Builder und DevOps-Hosts, die Images und Pakete hinter einem kontrollierten Ausgang abrufen müssen. Es ist nicht residential und es ist ein Forward-Proxy, kein Registry-Mirror oder Cache; für Pull-Through-Caching führen Sie einen Registry-Mirror daneben aus. Wenn Ihre Build-Flotte eine erlaubte Ausgangs-IP benötigt, fügen Sie eine dedizierte persönliche IP hinzu. Ein 407 überall bedeutet schlechte Proxy-Anmeldeinformationen — siehe die 407-Anleitung. Validieren Sie den Endpunkt mit den Tools.
Fragen, beantwortet
Warum schlägt docker pull fehl, obwohl ich http_proxy in meiner Shell gesetzt habe?
Da Bildabrufe vom Daemon und nicht von Ihrer Shell durchgeführt werden. Konfigurieren Sie den Proxy von dockerd über ein systemd-Drop-in (oder die Docker Desktop-Einstellungen) mit HTTP_PROXY/HTTPS_PROXY, dann daemon-reload und Docker neu starten.
Wie kann ich docker build und docker run proxyen, ohne die Dockerfile zu bearbeiten?
Fügen Sie einen Proxys-Block zu ~/.docker/config.json hinzu. Der Docker-Client injiziert httpProxy/httpsProxy automatisch in jeden Build-Schritt und Container, sodass keine Änderungen an der Dockerfile erforderlich sind.
Wie halte ich Proxy-Anmeldeinformationen aus meinem Bild heraus?
Setze sie nicht mit ENV im Dockerfile — das backt sie in die Schichten ein. Verwende Build-Argumente oder die client config.json-Injektion, damit die Anmeldeinformationen auf dem Build-Host bleiben und nicht im ausgelieferten Image.
Bietet s4m einen Registry-Mirror oder Cache an?
Nein. s4m ist ein Forward-Datacenter-Proxy für ausgehenden Verkehr, kein Pull-Through-Registry-Cache. Für das Caching von Bildern führen Sie einen Registry-Mirror aus und leiten Sie ihn bei Bedarf durch den Proxy.
Hinter einem Proxy ziehen und bauen
Leiten Sie den Docker-Daemon, Builds und Container über den authentifizierten HTTP-Endpunkt auf proxy.s4m.online:3128. Abrechnung nach Verbrauch, dedizierte IP für CI-Whitelist.
Menschen fanden diese Seite durch die Suche nach
- Docker hinter einem proxy
- wie man proxys mit Scrapy verwendet
- Docker hinter einem proxy Tutorial
- Docker hinter einem proxy Einstellungen
- wie man überprüft, ob ein proxy gültig ist (mit einem fertigen skript)
- wie socks5 Proxy funktioniert
- wie wireguard funktioniert
- ist Proxy-Authentifizierung sicher
- IP-Adresse
- wie lange leben kostenlose proxys
- Proxy-Authentifizierung
Echte Suchphrasen, auf die diese Seite antwortet — die verlinkten öffnen die Seite, die sie ausführlich behandelt.