Usar Dev Proxy en contenedores de desarrollo y GitHub Codespaces

De un vistazo
Objetivo: Instalar Dev Proxy en un contenedor de desarrollo o GitHub Codespaces
Hora: 10 minutos
Requisitos previos: Un proyecto con un archivo devcontainer.json, Docker o GitHub Codespaces

Si desarrolla en un contenedor de desarrollo o en GitHub Codespaces, puede instalar Dev Proxy mediante la función Dev Container Feature de Dev Proxy. La característica instala Dev Proxy en el contenedor y, una vez creado el contenedor, genera un certificado raíz de Dev Proxy único para el contenedor y confía en él. No es necesario seguir los pasos del primer inicio para confiar en el certificado usted mismo.

Agrega la característica Dev Proxy a tu contenedor de desarrollo

Para instalar Dev Proxy en el contenedor de desarrollo, agregue la característica Dev Proxy a la sección features del archivo .devcontainer/devcontainer.json:

{
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "features": {
    "ghcr.io/dotnet/dev-proxy/dev-proxy:1": {}
  }
}

Vuelva a generar el contenedor o cree un nuevo espacio de código para aplicar el cambio. Una vez iniciado el contenedor, compruebe que Dev Proxy está instalado:

devproxy --version

Note

La característica tiene una versión independiente de Dev Proxy. ghcr.io/dotnet/dev-proxy/dev-proxy:1 hace referencia a la versión 1 de Feature. Para elegir qué versión de Dev Proxy se va a instalar, use la opción version.

Configurar la función

La característica admite las siguientes opciones:

Option Description Type Predeterminado
version Versión del proxy de desarrollo para instalar: latest, betao una versión específica como 4.0.0 o v4.0.0. string latest
trustCertificate Una vez creado el contenedor, genere un certificado raíz del proxy de desarrollo único para el contenedor y confíe en él en todo el sistema y en los entornos de ejecución comunes. booleano true

Por ejemplo, para instalar una versión específica de Dev Proxy, use la siguiente configuración:

{
  "features": {
    "ghcr.io/dotnet/dev-proxy/dev-proxy:1": {
      "version": "4.0.0"
    }
  }
}

Para probar las características de versión preliminar más recientes, establezca version en beta. Al instalar una versión beta, la Función también agrega el comando devproxy-beta.

Si usa Dev Proxy en una configuración de contenedor de desarrollo compartido, considere la posibilidad de anclar Dev Proxy a una versión específica, en lugar de latest o beta. De este modo, te aseguras de que todos los usuarios que trabajan en el proyecto usan la misma versión de Dev Proxy.

Cómo gestiona la función el certificado raíz

El proxy de desarrollo usa un certificado raíz para descifrar el tráfico HTTPS. La característica no genera el certificado cuando genera la imagen. Si lo hiciera, el certificado y su clave privada acabarían en una capa de imagen y todos los usuarios que usen la misma imagen o el mismo prebuild de Codespaces compartirían la misma entidad de certificación de confianza.

En su lugar, después de crear el contenedor (postCreateCommand), la característica:

  1. Se ejecuta como el usuario remoto devproxy cert ensure para generar un certificado raíz único para el contenedor.
  2. Agrega el certificado al almacén de certificados del sistema (/usr/local/share/ca-certificates), para que curl, .NET y otras herramientas que usen el almacén del sistema confíen en él.

Algunos entornos de ejecución no usan el almacén de certificados del sistema, por lo que Feature establece las siguientes variables de entorno para que apunten al paquete de CA del sistema (/etc/ssl/certs/ca-certificates.crt):

Variable Usado por
NODE_EXTRA_CA_CERTS Node.js
REQUESTS_CA_BUNDLE Python requests
SSL_CERT_FILE Python y otras herramientas basadas en OpenSSL

Para confiar en el certificado, la característica instala un script auxiliar de propiedad raíz y permite al usuario remoto ejecutarlo con sudo sin contraseña. Si no desea que la característica genere el certificado y confíe en él, establezca trustCertificate a false:

{
  "features": {
    "ghcr.io/dotnet/dev-proxy/dev-proxy:1": {
      "trustCertificate": false
    }
  }
}

Importante

La característica no configura los almacenes de claves de Java, por lo que las aplicaciones Java no confían en el certificado raíz del proxy de desarrollo.

Python 3.13 y versiones posteriores habilitan la comprobación estricta de certificados, que rechaza los certificados que dev Proxy v3 y anteriores generan para hosts interceptados. Para llamar a las API a través del proxy de desarrollo desde Python 3.13 o posterior, use Dev Proxy v4 o posterior.

Usa Dev Proxy en el contenedor de desarrollo

La característica no inicia Dev Proxy y no establece las variables de entorno HTTP_PROXY o HTTPS_PROXY para todo el contenedor. Las variables de proxy de todo el contenedor enrutarían a los administradores de paquetes, git y el propio tráfico de VS Code a través de Dev Proxy, lo que hace que dejen de funcionar cuando Dev Proxy no se está ejecutando.

Para usar Dev Proxy, inícielo en un terminal del contenedor de desarrollo con el archivo de configuración:

devproxy --config-file .devproxy/devproxyrc.json

A continuación, configure la aplicación que está probando para usar Dev Proxy. Por ejemplo, para enrutar las solicitudes desde una aplicación de Node.js a través de Dev Proxy, inicie la aplicación con la variable de entorno HTTPS_PROXY:

HTTPS_PROXY=http://127.0.0.1:8000 npm start

Para obtener más información sobre cómo configurar la aplicación para usar Dev Proxy, consulte la guía de su tecnología, como Usar Dev Proxy con aplicaciones de Node.js o Usar Dev Proxy con aplicaciones de .NET.

Kit de herramientas de proxy de desarrollo

La característica agrega la extensión Dev Proxy Toolkit a VS Code en el contenedor de desarrollo. Si no desea instalar la extensión, exclúyala en su archivo devcontainer.json:

{
  "features": {
    "ghcr.io/dotnet/dev-proxy/dev-proxy:1": {}
  },
  "customizations": {
    "vscode": {
      "extensions": ["-garrytrinder.dev-proxy-toolkit"]
    }
  }
}

Imágenes admitidas

La característica admite imágenes basadas en Debian y Ubuntu en x64 y arm64. No se admiten Alpine ni otras imágenes basadas en musl.

Consulte también