HAProxy / Docker:击中运行Flask / React应用的Docker容器时502错误的网关

问题描述 投票:0回答:1

我正在尝试对Flask / React Web应用程序进行Docker化,以简化开发/协作,但是在从该应用程序获得正确响应方面存在问题。我能够构建图像并在容器中启动Flask服务器,但实际上遇到了问题。

我们使用HAProxy转发请求,当我在本地运行代理和Web服务器时,一切正常。问题一直在使docker混入其中。我相信这一定是端口映射问题,但是我没有主意,觉得我可能缺少关键的HAProxy / Docker细微之处。 proxy.cfg文件如下所示(不包括无关的主机):

global
 maxconn 4096
 pidfile ~/tmp/haproxy.pid

defaults
 log global
 log 127.0.0.1 local0
 log 127.0.0.1 local1 notice
 mode http
 timeout connect 300000
 timeout client 300000
 timeout server 300000
 maxconn 2000
 option redispatch
 retries 3
 option httpclose
 option httplog
 option forwardfor
 option httpchk HEAD / HTTP/1.0


frontend dev
   bind *:8080 ssl crt ./proxy.pem

    acl allow_web path_beg /app/

    use_backend be_web if allow_web

backend be_web
 balance roundrobin
 server web_5000 localhost:5000

Dockerfile:

FROM node:10.6.0

RUN apt-get update
RUN apt-get install -y python-pip python-dev build-essential 

WORKDIR /usr/src/app

COPY ./package.json .
RUN npm install
COPY . .
RUN pip install -e ./server

CMD ["npm", "start"]

docker-compose.yml:

version: "3"

services:
    userportal:
        build: .
        volumes:
            - /usr/src/app/node_modules
            - .:/usr/src/app
        ports:
            - "5000:5000"

Flask服务器绑定到端口5000,因此映射。我尝试将容器IP地址替换为localhost(例如172.19.0.2:5000),但结果相同。

编辑:

我尝试将代理作为服务添加到docker-compose.yml中,并将主机从localhost:5000更改为userportal_1:5000,但这导致了503。docker-compose.yml:

services:
    userportal:
        build: .
        volumes:
            - /usr/src/app/client/node_modules
            - ./client:/usr/src/app/client
            - ./server:/usr/src/app/server
        ports:
            - "5000:5000"
    proxy:
        image: haproxy:alpine
        volumes:
            - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
            - ./proxy.pem:/certs/proxy.pem
        ports:
            - "8080:8080"
docker flask haproxy
1个回答
0
投票

您应该提前知道您的容器IP

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

在某些时候,如果您想使用HAProxy,将其更容易地置于docker中以解决Avoir网络问题

如果您不想要,可以尝试:haproxy.conf

global
  maxconn 4096
  pidfile ~/tmp/haproxy.pid

defaults
  log global
  log 127.0.0.1 local0
  log 127.0.0.1 local1 notice
  mode http
  timeout connect 300000
  timeout client 300000
  timeout server 300000
  maxconn 2000
  option redispatch
  retries 3
  option httpclose
  option httplog
  option forwardfor
  option httpchk HEAD / HTTP/1.0


frontend dev
  bind 0.0.0.0:8080 ssl crt ./proxy.pem   // <-- change wildcard with 0.0.0.0
  acl allow_web path_beg /app/
  use_backend be_web if allow_web
  default_backend be_web                  // <-- add this line

backend be_web
  balance roundrobin
  mode http
  option forwardfor                       // <-- add this line
  option httpchk GET / HTTP/1.1           // <-- add this line
  server web_5000 userportal_1:5000 check // <-- change localhost to the nane of running container "userportal_1" or the IP if you get it

Dockerfile:

FROM node:10.6.0

RUN apt-get update
RUN apt-get install -y python-pip python-dev build-essential

WORKDIR /usr/src/app

COPY ./package.json .
RUN npm install
COPY . .
RUN pip install -e ./server

EXPOSE 5000 // <-- add this ine

CMD ["npm", "start"]

docker-compose.yml

version: "3"

services:
  userportal:
    build: .
    volumes:
      - /usr/src/app/node_modules
      - .:/usr/src/app
    ports:
      - "5000:5000"

尝试将您的HAProxy包含在docker-compose.yml中会很有帮助

© www.soinside.com 2019 - 2024. All rights reserved.