Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用节点代理来自容器的外部通信,通过其他服务模拟响应_Node.js_Docker_Proxy_Mocking_Docker Compose - Fatal编程技术网

Node.js 使用节点代理来自容器的外部通信,通过其他服务模拟响应

Node.js 使用节点代理来自容器的外部通信,通过其他服务模拟响应,node.js,docker,proxy,mocking,docker-compose,Node.js,Docker,Proxy,Mocking,Docker Compose,我有一个节点应用程序,我想为它编写集成测试。为此,我需要能够模拟http请求和websocket的请求。 我使用docker compose定义我的应用程序依赖项。mydocker compose.yml的相关部分是 version: "3.2" services: app: build: . command: npm run dev depends_on: - proxycontainer environment: HTTP_PROX

我有一个节点应用程序,我想为它编写集成测试。为此,我需要能够模拟http请求和websocket的请求。 我使用
docker compose
定义我的应用程序依赖项。my
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\u PROXY
env变量,则一切正常。

是否尝试在代理容器名称前使用
HTTP://
前缀

HTTP_PROXY: http://proxycontainer:8080
您还可以创建一个自定义网络,并为每个容器分配一个本地IP地址,以便可以使用静态IP访问它们

version: "3.2"
services:
  app:
    build: .
    command: npm run dev
    depends_on:
      - proxycontainer
    environment:
      HTTP_PROXY: http://172.28.1.2:8080/
      NO_PROXY: localhost,127.0.0.1
    networks:
      proxy_net:
        ipv4_address: 172.28.1.1
  proxycontainer:
    build: ./proxy
    networks:
      proxy_net:
        ipv4_address: 172.28.1.2

networks:
  proxy_net:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16