我有一个使用webpack开发服务器的应用程序。服务器代理到另一个Web API进行CRUD。我可以在本地运行时使用它,但是在构建容器时,该应用程序无法连接。
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,
},
},
},
docker文件FROM node:12-alpine
WORKDIR /app
COPY ./package*.json ./
RUN npm ci
COPY . ./
docker 组成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
此外,当我将主机从本地主机交换为 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正在运行。希望我能在这里得到一些帮助。
最佳答案
问题中没有完整描述整个上下文,尤其是在'http://localhost:4567
上侦听的服务。
我假设target: 'http://localhost:4567/streams'
在正在侦听:3000
的容器内执行,以尝试代理:4567
。
如果是这样,则缺少连接是正常的。当在容器内使用localhost
时,容器将尝试根据:4567
代理到自身。
如果尝试访问正在主机上监听:4567
的服务,则可能需要使用docker0
接口(interface)的IP地址,而不是this post中建议的localhost
。