Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
De un vistazo
Objetivo: Uso del proxy de desarrollo con Docker Compose
Tiempo: 20 minutos
Complementos: Varios
Requisitos previos:Configuración del proxy de desarrollo, Docker y Docker Compose instalados
Al desarrollar aplicaciones con Docker, es posible que quiera usar Dev Proxy para probar cómo controla la aplicación los errores de API, la limitación o las respuestas de API simuladas. En este artículo se muestra cómo usar el proxy de desarrollo con Docker Compose en dos escenarios:
- Proxy de desarrollo que se ejecuta en la máquina host, aplicación en un contenedor
- Proxy de desarrollo que se ejecuta en un contenedor junto con el contenedor de tu aplicación
Escenario 1: Proxy de desarrollo en host, aplicación en contenedor
En este escenario, ejecutas Dev Proxy directamente en tu máquina mientras la aplicación se ejecuta en un contenedor de Docker. Este enfoque es útil cuando estés desarrollando activamente y deseas interactuar directamente con Dev Proxy.
Configuración del contenedor de aplicaciones
Cree un archivo docker-compose.yaml que configure su aplicación para usar el proxy de desarrollo que se ejecuta en el host.
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"
Inicia el Proxy de Desarrollo en tu host
Antes de iniciar el contenedor de aplicaciones, inicie Dev Proxy en el equipo host. En macOS y Linux, vincule Dev Proxy a todas las interfaces de red.
devproxy --ip-address 0.0.0.0
En Windows, puede iniciar el proxy de desarrollo normalmente:
devproxy
Control de certificados TLS/SSL
Cuando la aplicación realiza solicitudes HTTPS a través del proxy de desarrollo, el contenedor debe confiar en el certificado de proxy de desarrollo. Tiene dos opciones:
Opción 1: Deshabilitar la validación de certificados (solo desarrollo)
Para realizar pruebas rápidas, puede deshabilitar la validación de certificados en la aplicación. Para Node.js aplicaciones, establezca la NODE_TLS_REJECT_UNAUTHORIZED=0 variable de entorno (ya incluida en el ejemplo anterior). En el caso de las aplicaciones .NET, puede configurar el cliente HTTP para omitir la validación de certificados.
Precaución
Nunca deshabilite la validación de certificados en el código de producción.
Opción 2: Confiar en el certificado de proxy de desarrollo en el contenedor
Para una configuración más similar a la de producción, instale el certificado de proxy de desarrollo en el contenedor. En primer lugar, exporte el certificado desde el host y agréguelo a la imagen de Docker. Consulte Uso del proxy de desarrollo con aplicaciones .NET que se ejecutan en Docker para obtener pasos detallados.
Inicio de la aplicación
Inicie el contenedor de la aplicación:
docker compose up
La aplicación ahora enruta todo el tráfico HTTP y HTTPS a través del proxy de desarrollo que se ejecuta en el host.
Escenario 2: Proxy de desarrollo y aplicación en contenedores independientes
En este escenario más avanzado, tanto el proxy de desarrollo como la aplicación se ejecutan en contenedores de Docker. Este enfoque es útil para las canalizaciones de CI/CD o cuando se desea un entorno de desarrollo totalmente contenedorizado.
Crea el volumen de certificados
Ambos contenedores necesitan acceso al certificado de proxy de desarrollo. Cree un volumen de Docker para compartirlo:
docker volume create devproxy-cert
Crea el script de punto de entrada
Cree un script entrypoint.sh que instale el certificado Dev Proxy cuando se inicie su contenedor de aplicaciones.
#!/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 "$@"
Cree el archivo ejecutable del script:
chmod +x entrypoint.sh
Creación del Dockerfile de la aplicación
Cree un Dockerfile para la aplicación que incluya los requisitos previos de instalación de certificados:
# 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"]
Creación de la configuración de Docker Compose
Cree un docker-compose.yaml archivo que defina ambos servicios:
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:
Creación de un archivo de configuración de proxy de desarrollo
Cree un archivo devproxyrc.json en el mismo directorio que docker-compose.yaml:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/rc.schema.json",
"urlsToWatch": [
"https://api.example.com/*",
"https://graph.microsoft.com/*"
],
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
}
]
}
Inicio de los contenedores
Inicie ambos contenedores con Docker Compose:
docker compose up
El Dev Proxy se inicia primero y genera su certificado. El contenedor de aplicaciones espera el certificado, lo instala y, a continuación, inicia la aplicación. Todas las solicitudes HTTP y HTTPS de tu aplicación ahora se enrutan a través de Dev Proxy.
Interactúa con el proxy de desarrollo
Dado que el proxy de desarrollo se ejecuta en un contenedor, puede interactuar con él de varias maneras:
Uso del terminal
Conecta al contenedor del proxy de desarrollo:
docker attach <container-name>
Uso de la API de proxy de desarrollo
La API de proxy de desarrollo se expone en el puerto 8897. Puede usarlo para controlar el proxy de desarrollo mediante programación:
# Start recording
curl -X POST http://localhost:8897/proxy/recording/start
# Stop recording
curl -X POST http://localhost:8897/proxy/recording/stop
Para obtener más información, consulte Dev Proxy API.