繁体   English   中英

Docker 容器内的 Nodejs 和 React

[英]Nodejs and React inside docker containers

我正在尝试在 Docker 容器中运行 Node/React 项目。 我有一个用于 API 和客户端应用程序的 NodeJS 服务器。 我还concurrently安装了,运行npm run dev时一切正常。

这个问题是当我通过docker-compose.yml文件运行服务器和应用程序时,我从客户端收到以下错误:

client | [HPM] Error occurred while trying to proxy request /api/current_user from localhost:3000 to http://localhost:5000 (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors)

这是docker-compose.yml

version: "3"
services:
  frontend:
    container_name: client
    build:
      context: ./client
      dockerfile: Dockerfile
    image: client
    ports:
      - "3000:3000"
    volumes:
      - ./client:/usr/src/app
    networks:
      - local
  backend:
    container_name: server
    build:
      context: ./
      dockerfile: Dockerfile
    image: server
    ports:
      - "5000:5000"
    depends_on:
      - frontend
    volumes:
      - ./:/usr/src/app
    networks:
      - local
networks:
  local:
    driver: bridge

服务器 Dockerfile

FROM node:lts-slim

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

EXPOSE 5000

# You can change this
CMD [ "npm", "run", "dev" ]

客户端 Dockerfile

FROM node:lts-slim

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

EXPOSE 3000

CMD [ "npm", "start" ]

我正在使用"http-proxy-middleware": "^0.21.0"所以我的setupProxy.js

const proxy = require('http-proxy-middleware');

module.exports = function(app) {
    app.use(proxy('/auth/google', { target: 'http://localhost:5000' }));
    app.use(proxy('/api/**', { target: 'http://localhost:5000' }));
};

您应该使用container_name而不是 localhost

    app.use(proxy('/auth/google', { target: 'http://localhost:5000' }));
    app.use(proxy('/api/**', { target: 'http://localhost:5000' }));

您还可以通过使用以下命令检查您的网络来检查这些详细信息:-

docker inspect <network_name>

它将显示所有连接到网络的容器,以及为这些容器创建的主机名。

注意:主机名是基于 container_names 创建的,否则基于服务名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM