最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用节点通过其他服务代理来自容器的外部流量模拟响应

运维笔记admin6浏览0评论

使用节点通过其他服务代理来自容器的外部流量模拟响应

使用节点通过其他服务代理来自容器的外部流量模拟响应

我有一个节点应用程序,我想编写集成测试。为了工作,我需要能够模拟对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: '', changeOrigin: true, logLevel: 'debug' }))

app.listen(8080)

为了测试代理我已经用我的应用程序替换了

const testProxy = async () => {
  const data = await axios.get("/");
  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变量一切都按预期工作。

回答如下:

您是否尝试在代理容器名称前使用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
发布评论

评论列表(0)

  1. 暂无评论