【问题标题】:error while connecting to upstream. Docker compose, NodeJS, Nginx连接上游时出错。 Docker 撰写,NodeJS,Nginx
【发布时间】:2021-02-06 11:37:35
【问题描述】:

我正在尝试为 Nginx 和 NodeJS(使用 React)设置一个 docker compose。但是得到以下错误: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: ~.*, request: "GET /favicon.ico HTTP/1.1", upstream: "http://192.168.0.2:3000/favicon.ico", host: "localhost", referrer: "http://localhost/"

曾尝试更改文件nginx.conf,添加depends_on,links参数,向default.conf添加各种配置,从windows和linux启动,使用其他端口,均无济于事。 有了这个配置,原来是收集其他项目,除此之外大家都在工作,但在结构上它与其余的相同,除了这里的根文件夹“app”中的.env文件。

Node 的 Dockerfile:

FROM node:13.12.0-alpine

# set working directory
WORKDIR /home/node/app

# install app dependencies

COPY package*.json ./

RUN npm install react-scripts -g
RUN npm install

# add app
COPY . ./

# start app
CMD ["npm", "start"]

docker-compose.yml:

version: '3'

services:
  nodejs:
    build:
      context: ../app
      dockerfile: ./../docker/dockerfile/node/Dockerfile
    container_name: user-node
    restart: unless-stopped
    volumes:
      - ../app:/home/node/app
    expose:
      - 3000
  nginx:
    image: nginx:latest
    container_name: forensic-nginx
    volumes:
        - ../app:/home/node/app
        - ./logs/nginx:/var/log/nginx
        - ./config/nginx:/etc/nginx/conf.d
    ports:
      - 80:80
    depends_on:
      - nodejs

default.conf (nginx):

server {
    listen 80;
    server_name ~.*;

    location / {
        proxy_pass http://user-node:3000;
    }
}

项目结构:

- project
  - app
    - package.json *and more*
  - docker
    - confing
      - nginx
        - default.conf
    - dockerfile
      - node
        - Dockerfile
    docker-compose.yml

在打开 localhost:80 时出现错误 502: bad geteway

【问题讨论】:

  • 我看不到你的应用程序的网络
  • 尝试 proxy_pass nodejs:3000;在 nginx 配置中

标签: node.js reactjs docker nginx docker-compose


【解决方案1】:

您需要使用 docker 网络。像这样更改您的docker-compose.yml

version: '3'

services:
  nodejs:
    networks:
      - custom-network
    build:
      context: ../app
      dockerfile: ./../docker/dockerfile/node/Dockerfile
    container_name: user-node
    restart: unless-stopped
    volumes:
      - ../app:/home/node/app
    expose:
      - 3000
  nginx:
    networks:
      - custom-network
    image: nginx:latest
    container_name: forensic-nginx
    volumes:
        - ../app:/home/node/app
        - ./logs/nginx:/var/log/nginx
        - ./config/nginx:/etc/nginx/conf.d
    ports:
      - 80:80
    depends_on:
      - nodejs
      
networks:
  custom-network:
    driver: bridge

你的 nginx 配置应该是这样的:

server {
    listen 80;
    server_name ~.*;

    location / {
        proxy_pass http://nodejs:3000;
    }
}

如果您在 localhost 上使用端口 80 时遇到问题,请尝试更改 docker-compose.yml 的 nginx 部分中的映射以使用另一个端口。例如

    ports:
      - 8088:80

【讨论】:

  • 我添加了网络并将 proxy_pass 更改为您建议的那个,但这并没有解决问题。此外,使用路径 nodejs:3000 的日志,会发生错误(/etc/nginx/conf.d/default.conf:6 中的 URL 前缀无效)。如果使用nodejs:3000 没有错误,但仍然有 502 响应。
猜你喜欢
  • 2021-06-20
  • 2020-07-29
  • 2017-06-25
  • 1970-01-01
  • 2017-12-13
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多