如何在docker compose中将nginx用于负载均衡器-简单的node.js?

时间:2019-05-25 20:47:19

标签: node.js docker nginx devops

我正在谷歌搜索并尝试将nginx用于带有docker compose的简单node.js应用程序。但是当我查看localhost:8081时,我的请求以502错误的门方式返回了我。如何处理此错误?

我的文件结构如下:

enter image description here

负载均衡器:

DockerFile:

FROM nginx:stable-alpine 
LABEL xxx yyyyyy
COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 8081
CMD ["nginx", "-g", "daemon off;"]

nginx.conf:

events { worker_connections 1024; }

http {

upstream localhost {
server backend1:3001;
server backend2:3001;
server backend3:3001;
}

server {
listen 8081;
server_name localhost;

location / {
   proxy_pass http://localhost;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header Host $http_host;
   proxy_set_header X-NginX-Proxy true;
}
 }
 }

docker-compose.yml


version: '3.2'
services:
  backend1:
      build: ./backend
      tty: true
      volumes:
        - './backend'

  backend2:
      build: ./backend
      tty: true
      volumes:
        - './backend'

  backend3:
      build: ./backend
      tty: true
      volumes:
        - './backend'

  loadbalancer:
      build: ./load-balancer
      tty: true
      links:
          - backend1
          - backend2
          - backend3
      ports:
          - '8081:8081'

volumes:
  backend:

我的存储库:https://github.com/yusufkaratoprak/nginx_docker_loadbalancer

2 个答案:

答案 0 :(得分:1)

未设置要运行的backend容器映像的命令。

默认情况下,官方的nodejs映像运行node,当存在tty时它将启动cli。我假设在compose定义中启用了tty,以防止容器崩溃。

用于应用程序的简单Dockerfile如下所示:

FROM node:boron
WORKDIR /app
COPY src/. /app/
RUN npm install
EXPOSE 3001
CMD [ "node", "/app/index.js" ]

大多数守护程序不需要tty,请从tty中删除docker-compose.yml设置。 links在版本2+撰写文件中也是多余的。

version: '3.2'
services:
  backend1:
      build: ./backend
      volumes:
        - './backend'

  backend2:
      build: ./backend
      volumes:
        - './backend'

  backend3:
      build: ./backend
      volumes:
        - './backend'

  loadbalancer:
      build: ./load-balancer
      ports:
          - '8081:8081'

volumes:
  backend:

答案 1 :(得分:0)

本文非常有帮助,它将帮助您使用Nginx,Docker和Node.js构建负载均衡器 Docker,NGINX and nodejs load balancer

这也是一个演示demo-video

的演示