【问题标题】:How can i serve from localhost?我如何从本地主机服务?
【发布时间】:2020-08-02 18:53:38
【问题描述】:

我有一个使用 webpack 开发服务器的 react 应用程序。服务器代理到另一个用于 CRUD 的 Web api。我可以在本地运行时使用它,但是在构建容器时,应用程序无法连接。

Webpack 配置

  devServer: {
    contentBase: resolve(__dirname, 'dist'),
    host: 'localhost',
    port: 3001,
    hot: true,
    open: true,
    inline: true,
    proxy: {
      '/api': {
        target: 'http://localhost:4567/streams',
        secure: false,
        pathRewrite: { '^/api': '' },
        changeOrigin: true,
      },
    },
  },

码头文件

FROM node:12-alpine

WORKDIR /app

COPY ./package*.json ./

RUN npm ci

COPY . ./

码头工人撰写

version: '3.7'

services:
  web:
    container_name: fm-admin
    restart: always
    build:
      context: .
    ports:
      - '3001:3001'
    command: npm start
    environment:
      - CHOKIDAR_USEPOLLING=true
    stdin_open: true

此外,当我将主机从 localhost 交换到 0.0.0.0 时,我收到以下错误

[HPM] Error occurred while trying to proxy request  from 0.0.0.0:3001 to http://localhost:4567/streams (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors)

但流 api 正在运行。

希望我能在这里得到一些帮助。

【问题讨论】:

  • 您是否希望端口 5000 或 4567 与 3001:3001 一起使用?
  • @OneCricketeer 我已经意识到日志不正确。我已经更新了它。我期待这个应用程序代理到http://localhost:4567/streams

标签: node.js docker webpack-dev-server


【解决方案1】:

问题中没有非常准确地描述整个上下文,尤其是在'http://localhost:4567 监听的服务。

我假设 target: 'http://localhost:4567/streams' 在容器内执行,该容器正在侦听 :3000 以尝试代理到 :4567
如果这是真的,那么缺乏连接是正常的。当在容器内使用localhost 时,容器将尝试在:4567 上代理到自身。

如果您尝试访问正在侦听主机上:4567 的服务,您可能需要使用docker0 接口的IP 地址,而不是this post 中建议的localhost

【讨论】:

  • 场景就是你所描述的。谢谢你的链接。我会通过它并尝试解决它。​​
  • 很可能,您需要将localhost 替换为172.17.0.1,这是默认的网桥子网地址。您可以简单地运行 ip a 并查找分配给 docker0 网络接口的地址
猜你喜欢
  • 2012-04-21
  • 1970-01-01
  • 2012-11-02
  • 2018-01-12
  • 1970-01-01
  • 2013-01-24
  • 2014-03-29
  • 2018-05-23
  • 2014-07-19
相关资源
最近更新 更多