Невозможно запустить клиент-серверное приложение с докером - PullRequest
0 голосов
/ 24 марта 2019

Добрый день!Я написал клиентские и серверные приложения, я запускаю их через докер, но клиентское приложение не может подключиться к серверу.

Код клиента:

import requests
import json

class Client:
    def attach_comp_to_employee(self, employee_id, company):
        try:
            res = requests.get('http://0.0.0.0:8080/',
                               data=json.dumps({"action": "comp_to_employee",
                                                "id": employee_id,
                                                "company": company,
                                                "owner_name": self.user,
                                                "dbname": self.dbname,
                                                "password": self.password}),
                               timeout=3)
        except requests.exceptions.ConnectionError:
            res = "Can't connect to server."
        except requests.exceptions.Timeout:
            res = "Time for connection expired."
        finally:
            return res

cl = Client("test_user1", "shop", "password1")
print("Send...")
res = cl.attach_comp_to_employee(6, "ABCD")
print(res)

Код сервера:

from aiohttp import web

class Service:
    def __init__(self):
        self.app = web.Application()
        self.app.add_routes([web.get('/', self.handler)])

    async def handler(self, request):
        return web.json_response({"response": "Hi"})

print("Start...")
ser = Service()
web.run_app(ser.app)

Я создал два файла Docker для них.

Dockerfile для клиента:

FROM python:3
WORKDIR /app
ADD . /app
RUN pip3 install requests
CMD ["python3", "client.py"]

Dockerfile для сервера:

FROM python:3
WORKDIR /app
ADD . /app
RUN pip3 install aiohttp
CMD ["python3", "server.py"]

Затем я создал docker-compose.yml:

version: '3'
services:
  server:
    build: ./server
  client:
    build: ./client
    links:
      - "server:localhost"

В конце концов мой каталог выглядит так:

project
|___server
|      |__Dockerfile
|      |__server.py
|__client
|      |__Dockerfile
|      |__client.py
|__docker_compose.yml

Когда я запускаю docker-compose up, я вижу это:

docker-compose up

Если я прерву его с помощью Cntr+ C, я увижу это:

Прерывание

Итак, сервер работает и ждет запросов.

Помогите мне, пожалуйста.Что не так в моем коде?Что я должен сделать, чтобы соединить эти два скрипта?

1 Ответ

0 голосов
/ 24 марта 2019

ваш бэкэнд-контейнер является сервером - поэтому он должен прослушивать определенные порты для приема клиентских запросов.

открыть порты в вашем Dockerfile:

FROM python:3
WORKDIR /app
ADD . /app
RUN pip3 install aiohttp
EXPOSE 8080
CMD ["python3", "server.py"]

теперь, как замечание @Klaus D., опция docker-compose links больше не должна использоваться. вместо этого в своем коде обращайтесь непосредственно к имени контейнера сервера.

удачи!

...