Задать вопрос
@Anrek

Почему выходит ошибка «111 connection refused while connecting to upstream» в docker-compose?

Есть docker-compose файл, запускаю там nginx в контейнере и 2 сервиса (1 на node js, второй на python).

Подключение к 1 сервису на node js работает, подключение ко 2 нет. в логах nginx ошибка: "111 connection refused while connecting to upstream". В docker-conpose у сервисов конфигурация одинаковая. Я решил, что ошибка должна быть в сервисе на python.

Я пробовал выяснить где ошибка так:
1) запустил сервис в контенейре (без compose - просто отдельно) - работает (и если внутри отправляю запрос и если снаружи к контенейру тоже)
2) если же запускаю через compose, но без nginx, то работает только запрос внутри контейнера. В снаружи ошибка "connection refused" .

Следовательно, ошибка в файле docker-compose. Но я не понимаю где.

Помогите, пожалуйста, в чем может быть проблема?

docker-compose.yml

version: '3.9'
services:

nginx-proxy:
image: nginx:stable-alpine
container_name: nginx-proxy
ports:
- 80:80
- 443:443
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
networks:
- network

service1:
build: ./code1
container_name: service1
restart: unless-stopped
networks:
- network

service2:
build: ./code2
container_name: service2
restart: unless-stopped
networks:
- network

networks:
network:
driver: bridge

Dockerfile service1

FROM  node:16.13.0

WORKDIR /usr/src/service1

COPY tsconfig.json ./
COPY package*.json ./
COPY src/ ./src/ 

RUN npm install && npm run compile 

EXPOSE 8081

CMD [ "node", "dist/index.js" ]


Dockerfile service2

FROM python:3.7

WORKDIR /usr/src/service2

COPY main.py ./

RUN pip install bottle && pip install secure-smtplib

EXPOSE 8086

CMD [ "python", "main.py" ]


nginx.conf

worker_processes auto;

events {
    worker_connections  1024;
}

http {
    upstream service1-stream {
        server service1:8081;
    }
    upstream service2-stream {
        server service2:8086;
    }

    server {
        listen                                   80;
        listen                                   [::]:80;
        server_name                              test1.ru www.test1.ru;
        location / {
            proxy_pass service1-stream;
        }
    }

    server {
        listen                                   80;
        listen                                   [::]:80;
        server_name                              ser.test1.ru www.ser.test1.ru;
        location / {
            proxy_pass service2-stream;
        }
    }
}

  • Вопрос задан
  • 1134 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Anrek Автор вопроса
Ошибка была не в конфигурационных файлах, а в особенностях запуска программы на python: нужно было задать хост запуска в коде 0.0.0.0 (а не localhost или 127.0.0.1 или др.)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
fzfx
@fzfx
18,5 дм
ошибка видимо тут:
EXPOSE 8085
server service2:8086;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы