当前位置: 首页 > 知识库问答 >
问题:

Docker容器的Webpack开发服务器代理

闾丘永春
2023-03-14

我有两个docker容器由docker compose管理,似乎无法正确使用webpack将某些请求代理到后端api。

docker-compose.yml:

version: '2'

services:
  web:
    build:
      context: ./frontend
    ports:
      - "80:8080"
    volumes:
      - ./frontend:/16AGR/frontend:rw
    links:
      - back:back
  back:
    build:
      context: ./backend
    expose:
      - "8080"
    ports:
      - "8081:8080"
    volumes:
      - ./backend:/16AGR/backend:rw

服务web是一个简单的react应用程序,由webpack开发服务器提供服务。服务返回是一个节点应用程序。

我没有问题从我的主机访问任何应用程序:

$ curl localhost
> index.html
$ curl localhost:8081
> Hello World

我还可以从web容器ping和curl back服务:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
73ebfef9b250        16agr_web           "npm run start"     37 hours ago        Up 13 seconds       0.0.0.0:80->8080/tcp     16agr_web_1
a421fc24f8d9        16agr_back          "npm start"         37 hours ago        Up 15 seconds       0.0.0.0:8081->8080/tcp   16agr_back_1

$ docker exec -it 73e bash
$ root@73ebfef9b250:/16AGR/frontend# curl back:8080
Hello world

但是我有一个问题与代理。Webpack开始于

webpack-dev-server  --display-reasons --display-error-details --history-api-fallback --progress --colors -d --hot --inline --host=0.0.0.0 --port 8080

配置文件是

前端/网页包。配置。js:

var webpack = require('webpack');
var config = module.exports = {
  ...
  devServer: {
    //redirect api calls to backend server
    proxy: {
      '/api': {
        target: "back:8080",
        secure: false
      }
    }
  }
  ...
}

例如,当我尝试在我的应用程序中使用链接请求/api/test时,我遇到了一个一般性错误,该链接和谷歌没有多大帮助:(

[HPM] Error occurred while trying to proxy request /api/test from localhost to back:8080 (EINVAL) (https://nodejs.org/api/errors.html#errors_common_system_errors)

我怀疑有些奇怪的事情,因为代理在容器上,请求在本地主机上,但我真的没有办法解决这个问题。

共有1个答案

时恩
2023-03-14

我想我设法解决了这个问题。只需使用以下命令更改网页包配置

  devServer: {
    //redirect api calls to backend server
    proxy: {
      '/api': {
        target: {
          host: "back",
          protocol: 'http:',
          port: 8080
        },
        ignorePath: true,
        changeOrigin: true,
        secure: false
      }
    }
  }
 类似资料:
  • 我试图让在Docker容器中运行,然后通过NGINX主机访问它。初始的加载,但无法连接到开发服务器的Web套接字连接。 VM47:35到“ws://example.com/sockjs-node/834/izehemiu/WebSocket”的WebSocket连接失败:WebSocket握手过程中出错:意外响应代码:400 我使用以下配置。

  • 我正在使用Spring Cloud创建微服务架构。 我正在使用Spring Cloud中的以下功能 Zuul–API网关服务,提供动态路由、监控、弹性、安全等功能- 功能区–客户端负载平衡器 Faign–声明性REST客户端 Eureka–服务注册和发现 Sleuth–通过日志进行分布式跟踪 Zipkin–具有请求可视化的分布式跟踪系统 Hystrix-适用于所有API的断路器、容错、Hystri

  • 问题内容: 我的单页应用程序在webpack-dev- server上运行。我可以在上加载和重新加载我的进入路线,并且每次都可以使用。但是我只能通过应用程序内的链接加载,即每当我从浏览器刷新按钮重新加载时,我都会 作为服务器响应,在控制台上我得到 内容安全策略:页面的设置禁止自行加载资源(“ default-src http:// localhost:8080 ”)。来源:;(function i

  • 我有一个运行Ubuntu的服务器,安装了Redis和Docker。我正在创建托管在Docker容器中的服务。如何将Docker容器中运行的服务与Docker外部运行的Redis连接起来? 我可以ping服务器。ioredis驱动程序无法连接到redis。错误:connect ECONREFUSE:6379

  • 我有最困难的时候让我的webpack开发服务器代理到我的后端。 我使用Vue和webpack cli模板。 我的后端托管在docker容器中,可以在localhost:8443/foo上看到 我的devServer配置设置为: 正如我前面所说,当我将浏览器指向https://localhost:8443/foo 当我运行我的webpack服务器,并试图https://localhost:9000/

  • 问题内容: 我想使用Docker部署我的rails项目。因此,我使用Docker-Compose。但是我收到一个奇怪的错误消息。当运行docker-compose up(包含db-container和postgresql,redis和带有rails的Web容器)时,我得到一个 rails server -h 所以我不明白为什么会收到此消息,因为每次运行docker- compose时,都会启动新容