HAProxy / Docker: 502 Passerelle lors de la frappe conteneur Docker course Flask / React application

voix
0

Je suis en train de Dockerize une application web Flask / React pour faciliter le développement / la collaboration, mais avoir des problèmes à obtenir une réponse appropriée de l'application. Je suis en mesure d'obtenir l'image construite et le serveur Flask a commencé dans un conteneur, mais avoir des problèmes frapper réellement.

Nous utilisons HAProxy aux demandes en avant, et les choses fonctionnent très bien quand j'ai le proxy et le serveur Web en cours d'exécution au niveau local. La question a été se docker dans le mélange. Je crois que ce doit être un problème de mappage de port, mais je suis d'idées et je me sens manquerai subtilités peut clés HAProxy / Docker. Le fichier proxy.cfg se présente comme suit (avec des hôtes étrangers non inclus):

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

Le serveur Flask se lie au port 5000 d' où la cartographie. J'ai essayé substituer l'adresse IP du conteneur pour localhost(par exemple 172.19.0.2:5000) , mais même résultat.

Note HAProxy est en cours d'exécution dans son propre terminal et pas à l'intérieur d'un conteneur.

Créé 13/02/2020 à 23:59
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Vous devez connaître votre conteneur IP à l'avance

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

À un certain moment, si vous voulez utiliser HAProxy il va plus facile de le faire à l'intérieur docker Compose de problèmes de réseau pour Avoir

Si vous ne voulez pas, vous pouvez essayer: 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"

Essayez d'inclure votre HAProxy dans votre docker-compose.yml aidera beaucoup

Créé 14/02/2020 à 00:56
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more