HAProxy / Docker: 502 Bad Gateway при ударе Docker контейнера работает колбу / React приложения

голоса
0

Я пытаюсь Dockerize в склянок / React веб-приложение для облегчения разработки / взаимодействия, но возникают проблемы получения надлежащего ответа от приложения. Я могу получить изображение построен и сервер Колба начал в контейнере, но возникли проблемы на самом деле бил его.

Мы используем HAProxy перенаправлять запросы, и все работает нормально, когда у меня есть прокси-сервер и веб-сервер, работающий на местном уровне. Вопрос был получить докер в смесь. Я считаю, что это должно быть проблемой отображения портов, но я из идей и чувствую, что может отсутствовать ключевые тонкостей HAProxy / Докер. В 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]

докер-compose.yml:

version: 3

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

Сервер колба соединяется с портом 5000 , следовательно , отображение. Я попытался подставив контейнер IP - адрес localhost(например 172.19.0.2:5000) , но тот же результат.

Примечание HAProxy работает в своем собственном терминале и не находится внутри контейнера.

Задан 13/02/2020 в 23:59
источник пользователем
На других языках...                            


1 ответов

голоса
0

Вы должны знать свой контейнер IP заранее

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

В какой-то момент, если вы хотите использовать HAProxy это будет более легко сделать это в Докер сочинять для для 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"]

докер-compose.yml

version: "3"

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

Попробуйте включить ваш HAProxy в вашем Докер-compose.yml поможет много

Ответил 14/02/2020 в 00:56
источник пользователем

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