Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
На первый взгляд
Цель: Использование прокси-сервера разработки с Docker Compose
Время: 20 минут
Плагины: Разные
Предварительные требования:настройка прокси-сервера разработки, Docker и Docker Compose
При разработке приложений с помощью Docker вы можете захотеть использовать Dev Proxy для тестирования того, как ваше приложение обрабатывает ошибки API, ограничение скорости или имитацию ответов API. В этой статье показано, как использовать прокси-сервер разработки с Docker Compose в двух сценариях:
- Сервер разработки, работающий на хост-компьютере, приложение в контейнере
- Прокси-сервер разработки, работающий в контейнере вместе с контейнером приложения
Сценарий 1. Разработка прокси-сервера на узле, приложении в контейнере
В этом сценарии вы запускаете прокси-сервер разработки непосредственно на компьютере, пока приложение выполняется в контейнере Docker. Этот подход полезен при активной разработке и прямом взаимодействии с «Dev Proxy».
Настройка контейнера приложения
docker-compose.yaml Создайте файл, который настраивает приложение для использования прокси-сервера разработки, работающего на узле:
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"
Запуск прокси-сервера разработки на узле
Перед запуском контейнера приложения запустите прокси-сервер разработки на хост-компьютере. На macOS и Linux привязать Dev-прокси ко всем сетевым интерфейсам.
devproxy --ip-address 0.0.0.0
В Windows вы можете запустить прокси разработки обычно:
devproxy
Обработка TLS/SSL-сертификатов
Когда приложение выполняет HTTPS-запросы через прокси-сервер разработки, контейнер должен доверять сертификату прокси-сервера разработки. У вас есть два варианта:
Вариант 1. Отключение проверки сертификатов (только для разработки)
Для быстрого тестирования можно отключить проверку сертификатов в приложении. Для Node.js приложений задайте NODE_TLS_REJECT_UNAUTHORIZED=0 переменную среды (уже включенную в предыдущий пример). Для приложений .NET можно настроить HTTP-клиент, чтобы пропустить проверку сертификата.
Предостережение
Никогда не отключайте проверку сертификатов в рабочем коде.
Вариант 2. Доверять сертификату прокси-сервера разработки в контейнере
Чтобы настроить среду, приближённую к рабочей, установите сертификат Dev Proxy в контейнере. Сначала экспортируйте сертификат из узла и добавьте его в образ Docker. Подробные инструкции см. в статье Об использовании прокси-сервера разработки с приложениями .NET, работающими в Docker .
Запуск приложения
Запустите контейнер приложения:
docker compose up
Теперь приложение направляет весь трафик HTTP и HTTPS через прокси разработки, работающий на узле.
Сценарий 2. Прокси-сервер разработки и приложение в отдельных контейнерах
В этом более сложном сценарии прокси-сервер разработки и приложение выполняются в контейнерах Docker. Этот подход полезен для конвейеров CI/CD или для полноконтейнерной среды разработки.
Создание объема сертификата
Оба контейнера должны получить доступ к сертификату прокси-сервера разработки. Создайте том Docker для совместного использования:
docker volume create devproxy-cert
Создание скрипта точки входа
entrypoint.sh Создайте скрипт, который устанавливает сертификат прокси-сервера разработки при запуске контейнера приложения:
#!/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 "$@"
Сделайте исполняемый скрипт:
chmod +x entrypoint.sh
Создайте Dockerfile приложения
Dockerfile Создайте приложение, включающее необходимые условия для установки сертификата:
# 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"]
Создание конфигурации Docker Compose
Создайте файл, который определяет оба сервиса docker-compose.yaml.
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:
Создание файла конфигурации прокси-сервера разработки
devproxyrc.json Создайте файл в том же каталоге, что и вашdocker-compose.yaml:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
"urlsToWatch": [
"https://api.example.com/*",
"https://graph.microsoft.com/*"
],
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
}
]
}
Запуск контейнеров
Запустите оба контейнера с помощью Docker Compose:
docker compose up
Прокси-сервер для разработки запускается первым и генерирует сертификат. Контейнер приложения ожидает сертификата, устанавливает его, а затем запускает приложение. Все HTTP-запросы и HTTPS из приложения теперь направляются через прокси-сервер разработки.
Взаимодействие с Dev прокси-сервером
Поскольку прокси-сервер разработки выполняется в контейнере, с ним можно взаимодействовать несколькими способами:
Использование терминала
Подключение к контейнеру прокси-сервера разработки:
docker attach <container-name>
Использование API прокси для разработки
API прокси-сервера Dev доступен на порту 8897. Его можно использовать для программного управления прокси-сервером разработки:
# Start recording
curl -X POST http://localhost:8897/proxy/recording/start
# Stop recording
curl -X POST http://localhost:8897/proxy/recording/stop
Дополнительные сведения см. в разделе API разработки прокси.