Zum Inhalt springen
GProxy
Registrierung
Гайды 6 Min. Lesezeit 32 Aufrufe

Docker Proxy Einrichtung

Erfahren Sie, wie Sie effektiv einen Docker-Proxy sowohl für einzelne Container als auch für docker-compose Dienste einrichten und konfigurieren. Optimieren Sie Ihr Netzwerk.

Docker Proxy Einrichtung

Die Einrichtung eines Docker-Proxys beinhaltet die Konfiguration einzelner Container, docker-compose-Dienste oder des Docker-Daemons selbst, um ausgehenden Netzwerkverkehr über einen zwischengeschalteten Proxy-Server zu leiten. Dies ist nützlich für Aufgaben wie das Herunterladen von Images, das Erstellen oder den Zugriff auf externe Ressourcen aus Anwendungen heraus.

Warum einen Proxy mit Docker verwenden?

Die Integration eines Proxys in Docker-Umgebungen erfüllt mehrere gängige Anforderungen:

  • Internetzugangskontrolle: In Unternehmens- oder eingeschränkten Netzwerkumgebungen kann der direkte Internetzugang von Build-Servern oder Containern untersagt sein. Ein Proxy fungiert als kontrolliertes Gateway.
  • Sicherheitsprüfung & Filterung: Proxys können ausgehenden Datenverkehr von Containern abfangen und auf bösartige Inhalte scannen oder Inhaltsrichtlinien durchsetzen.
  • Caching: Proxys können häufig aufgerufene externe Ressourcen (z. B. Paketmanager-Repositories, Basis-Images) zwischenspeichern, wodurch die Bandbreitennutzung reduziert und Builds/Downloads beschleunigt werden.
  • Anonymität/Geo-Entsperrung: Obwohl in Unternehmensumgebungen seltener, können Proxys die Ursprungs-IP maskieren oder Geo-Beschränkungen umgehen.

Arten von Proxy-Konfigurationen

Es gibt zwei primäre Kontexte für das Proxying in Docker:

  1. Docker-Daemon-Proxy: Konfiguriert den Docker-Daemon selbst, um einen Proxy für Operationen wie das Herunterladen von Basis-Images, den Zugriff auf entfernte Registries oder während des Build-Prozesses (für Befehle wie RUN apt-get update) zu verwenden.
  2. Container-/Dienst-Proxy: Konfiguriert einzelne Container oder Dienste innerhalb von docker-compose, um einen Proxy für ihren eigenen ausgehenden Anwendungsdatenverkehr zur Laufzeit zu verwenden.

Diese Konfigurationen sind unabhängig voneinander und oft sind beide für eine vollständige Einrichtung erforderlich.

Docker-Daemon-Proxy-Konfiguration

Diese Methode stellt sicher, dass die Operationen des Docker-Daemons, einschließlich Image-Downloads und einiger Build-Schritte, über den angegebenen Proxy laufen.

Für systemd-basierte Linux-Hosts

Die meisten modernen Linux-Distributionen verwenden systemd. Erstellen Sie ein Drop-in-Verzeichnis für den Docker-Dienst:

sudo mkdir -p /etc/systemd/system/docker.service.d

Erstellen Sie eine Konfigurationsdatei (z. B. http-proxy.conf) in diesem Verzeichnis:

sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

Fügen Sie den folgenden Inhalt hinzu und ersetzen Sie YOUR_PROXY_HOST und YOUR_PROXY_PORT durch Ihre Proxy-Details:

[Service]
Environment="HTTP_PROXY=http://YOUR_PROXY_HOST:YOUR_PROXY_PORT"
Environment="HTTPS_PROXY=http://YOUR_PROXY_HOST:YOUR_PROXY_PORT"
Environment="NO_PROXY=localhost,127.0.0.1,::1,YOUR_DOCKER_NETWORK_CIDR,YOUR_INTERNAL_DOMAINS"

Hinweis:
* HTTP_PROXY und HTTPS_PROXY sollten typischerweise das http://-Schema verwenden, auch für HTTPS-Verkehr, da der Proxy-Server die TLS-Verhandlung übernimmt.
* NO_PROXY ist entscheidend. Es verhindert, dass Datenverkehr zu bestimmten Hosts oder Netzwerken über den Proxy geleitet wird. Fügen Sie localhost, 127.0.0.1, ::1 und alle internen Docker-Netzwerke (z. B. 172.17.0.0/16 für das Standard-Bridge-Netzwerk oder benutzerdefinierte Netzwerk-CIDRs) hinzu, um sicherzustellen, dass Container miteinander und mit dem Host ohne Probleme kommunizieren können. Fügen Sie auch alle internen Domainnamen hinzu, die den Proxy umgehen sollen.

Laden Sie systemd neu und starten Sie den Docker-Daemon neu, damit die Änderungen wirksam werden:

sudo systemctl daemon-reload
sudo systemctl restart docker

Überprüfen Sie dies, indem Sie ein Image herunterladen:

docker pull alpine

Wenn der Proxy korrekt konfiguriert ist, wird dieser Download-Vorgang über den Proxy geleitet.

Für Docker CLI (Clientseitige Konfiguration)

Diese Konfiguration betrifft den Docker-Client bei der Interaktion mit Registries. Sie ist seltener für die daemonweite Proxy-Nutzung, aber nützlich für spezifische CLI-Operationen.

Erstellen oder bearbeiten Sie ~/.docker/config.json:

{
  "proxies": {
    "default": {
      "httpProxy": "http://YOUR_PROXY_HOST:YOUR_PROXY_PORT",
      "httpsProxy": "http://YOUR_PROXY_HOST:YOUR_PROXY_PORT",
      "noProxy": "localhost,127.0.0.1,::1,YOUR_DOCKER_NETWORK_CIDR,YOUR_INTERNAL_DOMAINS"
    }
  }
}

Diese Konfiguration gilt für den Benutzer, der die Docker CLI ausführt.

Container-/Dienst-Proxy-Konfiguration

Diese Methode konfiguriert bestimmte Container oder docker-compose-Dienste, um einen Proxy für ihren ausgehenden Laufzeitverkehr zu verwenden. Dies unterscheidet sich vom Daemon-Proxy und ist oft notwendig, damit Anwendungen, die in Containern ausgeführt werden, über einen Proxy auf externe Ressourcen zugreifen können.

Verwendung von Dockerfile

Sie können Proxy-Umgebungsvariablen direkt in Ihrem Dockerfile festlegen. Dies integriert die Proxy-Einstellungen in das Image.

FROM ubuntu:latest

# Set proxy for build time operations (e.g., apt-get update)
ENV HTTP_PROXY="http://YOUR_PROXY_HOST:YOUR_PROXY_PORT" \
    HTTPS_PROXY="http://YOUR_PROXY_HOST:YOUR_PROXY_PORT" \
    NO_PROXY="localhost,127.0.0.1,::1,YOUR_DOCKER_NETWORK_CIDR,YOUR_INTERNAL_DOMAINS"

RUN apt-get update && apt-get install -y curl

# These ENV variables will also be present at runtime unless overridden
CMD ["curl", "http://example.com"]

Überlegungen:
* Proxy-Anmeldeinformationen in Dockerfiles stellen ein Sicherheitsrisiko dar. Erwägen Sie stattdessen die Verwendung von Build-Argumenten (ARG) oder Laufzeit-Umgebungsvariablen (-e oder environment in docker-compose.yml).
* Wenn der Proxy nur während des Builds benötigt wird, heben Sie die Variablen am Ende der Build-Phase in einem Multi-Stage-Build auf oder verwenden Sie RUN --mount=type=secret,id=proxy,target=/run/secrets/proxy-creds für eine sicherere Handhabung.

Verwendung von docker run

Für einzelne Container übergeben Sie Proxy-Einstellungen mit dem Flag -e:

docker run -e HTTP_PROXY="http://YOUR_PROXY_HOST:YOUR_PROXY_PORT" \
           -e HTTPS_PROXY="http://YOUR_PROXY_HOST:YOUR_PROXY_PORT" \
           -e NO_PROXY="localhost,127.0.0.1,::1,172.17.0.0/16,my-app-service" \
           my-image:latest curl http://example.com

Verwendung von docker-compose.yml

Für Multi-Service-Anwendungen ist docker-compose der Standard. Definieren Sie Proxy-Umgebungsvariablen im environment-Abschnitt jedes Dienstes, der Proxy-Zugriff benötigt:

version: '3.8'
services:
  webapp:
    image: my-webapp:latest
    environment:
      - HTTP_PROXY=http://YOUR_PROXY_HOST:YOUR_PROXY_PORT
      - HTTPS_PROXY=http://YOUR_PROXY_HOST:YOUR_PROXY_PORT
      - NO_PROXY=localhost,127.0.0.1,::1,your-db-service,your-cache-service,172.18.0.0/16 # Add internal service names and network CIDRs
    # ... other service configurations

  database:
    image: postgres:13
    # This service typically does not need proxy settings if it only communicates internally or is not outbound
    # ... other service configurations

Hinweis zu NO_PROXY in docker-compose:
* Fügen Sie localhost, 127.0.0.1, ::1 hinzu.
* Fügen Sie die Namen anderer Dienste innerhalb desselben docker-compose-Netzwerks hinzu (z. B. your-db-service).
* Fügen Sie den CIDR-Bereich des von docker-compose erstellten Docker-Netzwerks hinzu (z. B. 172.18.0.0/16, wenn Ihr docker-compose-Netzwerk in diesem Bereich liegt). Sie können das Netzwerk mit docker network inspect <network_name> überprüfen, um dessen CIDR zu finden.

Externe proxy.env-Datei

Für eine bessere Verwaltung sensibler oder häufig geänderter Proxy-Einstellungen können Sie diese in einer externen .env-Datei definieren und in docker-compose.yml darauf verweisen:

proxy.env:

HTTP_PROXY=http://YOUR_PROXY_HOST:YOUR_PROXY_PORT
HTTPS_PROXY=http://YOUR_PROXY_HOST:YOUR_PROXY_PORT
NO_PROXY=localhost,127.0.0.1,::1,your-db-service,your-cache-service,172.18.0.0/16

docker-compose.yml:

version: '3.8'
services:
  webapp:
    image: my-webapp:latest
    env_file:
      - ./proxy.env
    # ... other service configurations

Dieser Ansatz ist sauberer und ermöglicht einfache Aktualisierungen, ohne die docker-compose.yml direkt zu ändern.

SOCKS-Proxy-Konfiguration

Während HTTP/HTTPS-Proxys am häufigsten sind, verwenden einige Umgebungen SOCKS-Proxys. Docker unterstützt SOCKS-Proxy-Umgebungsvariablen (SOCKS_PROXY, ALL_PROXY) nicht nativ auf die gleiche allgegenwärtige Weise wie HTTP/HTTPS.

  • Anwendungsebene: Die meisten Anwendungen benötigen explizite SOCKS-Unterstützung. Wenn Ihre Anwendung im Container SOCKS unterstützt, können Sie ALL_PROXY oder ähnliche Variablen übergeben.
  • Proxychains-NG: Für Anwendungen, die SOCKS nicht nativ unterstützen, können Tools wie proxychains-ng im Container installiert werden, um den Datenverkehr durch einen SOCKS-Proxy zu erzwingen. Dies erhöht die Komplexität und den Overhead.

Für typische Docker-Bereitstellungen wird HTTP/HTTPS-Proxying aufgrund der breiteren Unterstützung bevorzugt.

Vergleich der Proxy-Konfigurationsmethoden

Methode Geltungsbereich Wann zu verwenden Vorteile Nachteile
Docker-Daemon (systemd) Hostweite Docker-Daemon-Operationen Für alle Image-Downloads, Build-Schritte und Registry-Interaktionen auf dem Host. Zentralisiert für den Daemon. Stellt sicher, dass alle Builds/Downloads den Proxy verwenden. Erfordert systemd-Kenntnisse. Erfordert Daemon-Neustart. Betrifft keine Laufzeit-Container-Anwendungen.
Docker CLI (config.json) Benutzerspezifische Docker-CLI-Operationen Für die CLI-Befehle eines bestimmten Benutzers, die mit Registries interagieren. Benutzerspezifisch, betrifft keine anderen Benutzer oder den Daemon. Betrifft nur die CLI, nicht den Daemon oder die Container-Laufzeit.
Dockerfile (ENV) Image-Build-Zeit & Container-Laufzeit Wenn Proxy-Einstellungen für alle Instanzen eines Images konsistent sind. Im Image enthalten. Einfach für die Entwicklung. Backt Einstellungen in das Image ein (weniger flexibel). Sicherheitsrisiko, wenn Anmeldeinformationen enthalten sind.
docker run (-e) Einzelne Container-Laufzeit Für Ad-hoc-Tests, spezifische Container-Ausführungen oder das Überschreiben von Dockerfile-Einstellungen. Hochflexibel, laufzeitspezifisch. Umständlich für mehrere Container oder docker-compose-Setups.
docker-compose.yml (environment/env_file) Dienstspezifische Container-Laufzeit Für Multi-Service-Anwendungen, bei denen jeder Dienst unterschiedliche Proxy-Anforderungen hat. Definiert Einstellungen pro Dienst sauber. Unterstützt externe .env-Dateien für Geheimnisse/Flexibilität. Erfordert Definition für jeden Dienst. Betrifft keine Daemon-Ebene-Operationen (z. B. docker-compose build).

Fehlerbehebung bei häufigen Proxy-Problemen

  • Umgebungsvariablen überprüfen: Verwenden Sie in einem laufenden Container docker exec -it <container_id> env, um zu überprüfen, ob HTTP_PROXY, HTTPS_PROXY und NO_PROXY korrekt gesetzt sind.
  • Konnektivität vom Container aus testen:
    bash docker exec -it <container_id> curl -v --proxy <YOUR_PROXY_HOST:YOUR_PROXY_PORT> http://example.com
    Dies zwingt curl explizit, den Proxy zu verwenden, wobei die Umgebungsvariablen des Containers umgangen werden, für direkte Tests.
  • Proxy-Server-Protokolle überprüfen: Überprüfen Sie die Zugriffsprotokolle Ihres Proxy-Servers, um festzustellen, ob Datenverkehr vom Docker-Host oder von Containern ihn erreicht und verarbeitet wird.
  • Netzwerk-Konnektivität: Stellen Sie sicher, dass der Docker-Host den Proxy-Server am angegebenen Port erreichen kann. Verwenden Sie curl oder telnet vom Docker-Host aus.
  • Firewall-Regeln: Überprüfen Sie, ob keine Firewall (Host, Netzwerk oder Proxy-Server) den Datenverkehr zwischen dem Docker-Host/Containern und dem Proxy-Server blockiert.
  • DNS-Auflösung: Stellen Sie sicher, dass die DNS-Auflösung in den Containern korrekt funktioniert, insbesondere für den Proxy-Host selbst und die Zieldomains.
  • NO_PROXY-Konfiguration: Falsche oder unvollständige NO_PROXY-Einstellungen führen oft zu internen Kommunikationsfehlern. Stellen Sie sicher, dass alle internen Netzwerke, Docker-Bridge-Netzwerke und Dienstnamen aufgeführt sind.
Aktualisiert: 03.03.2026
Zurück zur Kategorie

Testen Sie unsere Proxys

20.000+ Proxys in über 100 Ländern weltweit

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.