У меня есть приложение для узла, для которого я хочу написать интеграционные тесты.Чтобы это работало, мне нужно иметь возможность имитировать запросы как для http-запросов, так и для websocket.Я использую docker-compose
для определения зависимостей моего приложения.Соответствующая часть моего docker-compose.yml
:
version: "3.2"
services:
app:
build: .
command: npm run dev
depends_on:
- proxycontainer
environment:
HTTP_PROXY: proxycontainer:8080
NO_PROXY: localhost,127.0.0.1
proxycontainer:
build: ./proxy
У меня есть простое Dockerfile
для приложения узла
FROM node:8.12.0-alpine as base
WORKDIR /usr/app
COPY package*.json ./
RUN apk add --no-cache --virtual .gyp \
python \
make \
g++ \
&& npm install \
&& apk del .gyp
FROM base as build
COPY . .
RUN npm run build
Прокси Dockerfile
выглядит как
FROM node:8.12.0-alpine
WORKDIR /usr/app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "npm", "run", "proxy" ]
Где npm run proxy
запускает node ./index.js
для этого простого файла
const express = require('express')
const proxy = require('http-proxy-middleware')
const app = express()
app.use('/', proxy({ target: 'http://www.example.org', changeOrigin: true, logLevel: 'debug' }))
app.listen(8080)
Чтобы протестировать только прокси, я заменил мое приложение на
const testProxy = async () => {
const data = await axios.get("http://example.org/");
console.log(data.data)
}
testProxy()
При запуске этого примерая получаю сообщение об ошибке Error: connect EINVAL 0.0.31.144:80 - Local (0.0.0.0:0)
Итак, как я могу прокси-сервер внешних запросов от одной службы Docker узла в службу прокси узла, которая затем может смоделировать ответ для соединений http и websocket?
Еслия удаляю переменную HTTP_PROXY
env все работает как положено.