在Docker中运行的Aiohttp和NGINX

时间:2018-09-29 13:56:01

标签: python python-3.x docker nginx aiohttp

长话短说

我想在Nginx Web服务器上运行aiohttp后端服务。两者都应在docker容器中运行。此外,我的前端角度应用程序应该访问我的后端服务。

预期的行为

我希望nginx Web服务器可以连接到在docker中运行的后端系统aiohttp。

实际行为

当我尝试在aiohttp后端服务上调用GET请求时,总是在docker日志中出现错误。

  

nginx_1 | 2018/09/29 13:48:03 [错误] 6#6:* 1((111:连接被拒绝)连接到上游时失败(111:连接被拒绝),客户端:172.19.0.1,服务器:,请求:“ GET / toolservice / volatility?command = pslist HTTP / 1.1“,上游:” http://172.19.0.2:80/toolservice/volatility?command=pslist“,主机:” localhost“   nginx_1 | 172.19.0.1--[29 / Sep / 2018:13:48:03 +0000]“ GET / toolservice / volatility?command = pslist HTTP / 1.1” 502576“-”“ Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,例如Gecko)Chrome / 69.0.3497.100 Safari / 537.36“”-“

Docker-compose.yml

version: '3'

services:

    nginx:
      build: ./nginx
      restart: always
      depends_on:
        - toolservice
        - ifs
      ports:
       - "80:80"

    ifs:
      restart: always
      build: ../ifsbackend
      ports:
        - "8002:8000"

    toolservice:
      restart: always
      build: ../ToolService
      ports:
        - "8001:8000"

Dockerfile nginx Web服务器

FROM nginx:1.13-alpine

RUN rm /etc/nginx/conf.d/default.conf
COPY conf/server.conf /etc/nginx/conf.d/

Dockerfile aiohttp后端

FROM python:3.6.6-alpine
COPY tool /
COPY requirements.txt /
COPY toolservice_config.yaml /
RUN apk update && apk add \
    python3-dev \
    musl-dev \
    gcc \
    && pip install -r requirements.txt \
    && pip install virtualenv
RUN python3 -m virtualenv --python=python3 virtualenv
EXPOSE 8080
CMD [ "python", "server.py" ]

Nginx Web服务器配置

#upstream toolservice {
 # server 0.0.0.0:8001 fail_timeout=0;
#}

server {
    listen 80;

    #server_name localhost;
    proxy_buffers 8 16k;
    proxy_buffer_size 32k;

    location /toolservice {
        proxy_pass http://toolservice;
        proxy_redirect default;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


    }
    location /ifs {
      proxy_pass http://ifs;
      proxy_redirect default;

      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }
}

Aiohttp工具服务后端

from aiohttp import web
from routes import setup_routes
from settings import config

app = web.Application()
setup_routes(app)
app['config'] = config
web.run_app(app, port=8001)

1 个答案:

答案 0 :(得分:1)

Aiohttp在容器toolservice中的端口8001上运行,但是您代理到端口80。

proxy_pass http://toolservice;

尝试代理到8001:

proxy_pass http://toolservice:8001;

也许您需要修复toolservice容器的端口发布-我不确定100%:

  ports:
    - "8001:8001"