Verwenden des Dev-Proxys mit Docker Compose

Auf einen Blick
Ziel: Verwenden des Dev-Proxys mit Docker Compose
Zeit: 20 Minuten
Plugins: Verschiedene
Voraussetzungen:Einrichten von Dev Proxy, Docker und Docker Compose installiert

Wenn Sie Anwendungen mit Docker entwickeln, sollten Sie mit Dev Proxy testen, wie Ihre App API-Fehler, Drosselung oder Simulierte API-Antworten verarbeitet. In diesem Artikel wird gezeigt, wie Sie Dev Proxy mit Docker Compose in zwei Szenarien verwenden:

  • Dev Proxy, der auf Ihrem Hostcomputer ausgeführt wird, App in einem Container
  • Dev Proxy, der zusammen mit Ihrem App-Container in einem Container ausgeführt wird

Szenario 1: Dev-Proxy auf Host, App im Container

In diesem Szenario führen Sie Dev Proxy direkt auf Ihrem Computer aus, während Ihre Anwendung in einem Docker-Container ausgeführt wird. Dieser Ansatz ist nützlich, wenn Sie aktiv entwickeln und direkt mit Dev Proxy interagieren möchten.

Konfigurieren des Anwendungscontainers

Erstellen Sie eine docker-compose.yaml Datei, die Ihre Anwendung so konfiguriert, dass der auf Ihrem Host ausgeführte Dev-Proxy verwendet wird:

services:
  app:
    build: .
    environment:
      # Point to Dev Proxy on the host machine
      - HTTPS_PROXY=http://host.docker.internal:8000
      - HTTP_PROXY=http://host.docker.internal:8000
      # For Node.js applications
      - NODE_TLS_REJECT_UNAUTHORIZED=0
    extra_hosts:
      # Ensure host.docker.internal resolves correctly on Linux
      - "host.docker.internal:host-gateway"

Starten des Dev-Proxys auf Ihrem Host

Bevor Sie Ihren Anwendungscontainer starten, starten Sie Dev Proxy auf Ihrem Hostrechner. Binden Sie unter macOS und Linux Dev Proxy an alle Netzwerkschnittstellen:

devproxy --ip-address 0.0.0.0

Unter Windows können Sie Dev Proxy normal starten:

devproxy

Verwalten von TLS/SSL-Zertifikaten

Wenn Ihre Anwendung HTTPS-Anforderungen über Dev Proxy sendet, muss der Container dem Dev-Proxyzertifikat vertrauen. Sie haben zwei Möglichkeiten:

Option 1: Zertifikatüberprüfung deaktivieren (nur Entwicklung)

Für schnelle Tests können Sie die Zertifikatüberprüfung in Ihrer Anwendung deaktivieren. Legen Sie für Node.js Anwendungen die NODE_TLS_REJECT_UNAUTHORIZED=0 Umgebungsvariable (bereits im vorherigen Beispiel enthalten) fest. Für .NET-Anwendungen können Sie Ihren HTTP-Client so konfigurieren, dass die Zertifikatüberprüfung übersprungen wird.

Vorsicht

Deaktivieren Sie niemals die Zertifikatüberprüfung im Produktionscode.

Option 2: Vertrauen Sie dem Dev Proxy-Zertifikat im Container

Installieren Sie für ein produktionsähnliches Setup das Dev Proxy-Zertifikat in Ihrem Container. Exportieren Sie zunächst das Zertifikat von Ihrem Host, und fügen Sie es Ihrem Docker-Image hinzu. Ausführliche Schritte finden Sie unter Verwenden von Dev Proxy mit .NET-Anwendungen, die in Docker ausgeführt werden .

Starten Der Anwendung

Starten Sie Ihren Anwendungscontainer:

docker compose up

Ihre Anwendung leitet jetzt den gesamten HTTP- und HTTPS-Datenverkehr über Dev Proxy weiter, der auf Ihrem Host ausgeführt wird.

Szenario 2: Dev Proxy und App in separaten Containern

In diesem erweiterten Szenario werden sowohl Dev Proxy als auch Ihre Anwendung in Docker-Containern ausgeführt. Dieser Ansatz ist für CI/CD-Pipelines nützlich oder wenn Sie eine vollständig containerisierte Entwicklungsumgebung benötigen.

Erstellen des Zertifikatsvolumens

Beide Container benötigen Zugriff auf das Dev Proxy-Zertifikat. Erstellen Sie ein Docker-Volume, um es zu teilen:

docker volume create devproxy-cert

Skript für den Einstiegspunkt erstellen

Erstellen Sie ein entrypoint.sh Skript, das das Dev Proxy-Zertifikat installiert, wenn der Anwendungscontainer gestartet wird:

#!/bin/bash
set -e

# Wait for the Dev Proxy certificate to be available
echo "Waiting for Dev Proxy certificate..."
while [ ! -f /cert/rootCert.pfx ]; do
  sleep 1
done

# Convert PFX to PEM format
openssl pkcs12 \
  -in /cert/rootCert.pfx \
  -out /usr/local/share/ca-certificates/dev-proxy-ca.crt \
  -clcerts \
  -nokeys \
  -passin pass:""

# Update system certificates
update-ca-certificates

echo "Dev Proxy certificate installed"

# Execute the main command
exec "$@"

Erstellen Sie die ausführbare Datei des Skripts:

chmod +x entrypoint.sh

Erstellen der Anwendung Dockerfile

Erstellen Sie eine Dockerfile für Ihre Anwendung, die die Voraussetzungen für die Zertifikatinstallation enthält.

# Example for a Node.js application
FROM node:20

# Install certificate tools
RUN apt-get update && apt-get install -y \
    openssl \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy application files
COPY package*.json ./
RUN npm install
COPY . .

# Copy entrypoint script
COPY entrypoint.sh /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "index.js"]

Erstellen der Docker Compose-Konfiguration

Erstellen Sie eine docker-compose.yaml Datei, die beide Dienste definiert:

services:
  dev-proxy:
    image: ghcr.io/dotnet/dev-proxy:latest
    ports:
      - "8000:8000"
      - "8897:8897"
    volumes:
      # Mount your Dev Proxy configuration
      - ./devproxyrc.json:/config/devproxyrc.json
      # Share the certificate with the app container
      - devproxy-cert:/home/devproxy/.config/dev-proxy/rootCert
    # Generate the certificate on startup
    command: ["--install-cert"]
    stdin_open: true
    tty: true

  app:
    build: .
    depends_on:
      - dev-proxy
    environment:
      # Point to the Dev Proxy container
      - HTTPS_PROXY=http://dev-proxy:8000
      - HTTP_PROXY=http://dev-proxy:8000
    volumes:
      # Mount the certificate volume
      - devproxy-cert:/cert:ro

volumes:
  devproxy-cert:

Erstellen einer Dev Proxy-Konfigurationsdatei

Erstellen Sie eine devproxyrc.json Datei im selben Verzeichnis wie Ihr docker-compose.yaml:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.0.0/rc.schema.json",
  "urlsToWatch": [
    "https://api.example.com/*",
    "https://graph.microsoft.com/*"
  ],
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    }
  ]
}

Starten der Container

Starten Sie beide Container mit Docker Compose:

docker compose up

Dev Proxy startet zuerst und generiert sein Zertifikat. Ihr Anwendungscontainer wartet auf das Zertifikat, installiert es und startet dann die Anwendung. Alle HTTP- und HTTPS-Anforderungen ihrer Anwendung werden jetzt über Dev Proxy weitergeleitet.

Interagieren mit Dev Proxy

Da Dev Proxy in einem Container ausgeführt wird, können Sie auf verschiedene Arten mit dem Proxy interagieren:

Verwenden des Terminals

Anfügen an den Dev Proxy-Container:

docker attach <container-name>

Verwenden der Dev-Proxy-API

Die Dev-Proxy-API wird am Port 8897 verfügbar gemacht. Sie können ihn verwenden, um Dev Proxy programmgesteuert zu steuern:

# Start recording
curl -X POST http://localhost:8897/proxy/recording/start

# Stop recording
curl -X POST http://localhost:8897/proxy/recording/stop

Weitere Informationen finden Sie unter Dev Proxy-API.

Siehe auch