обмен данными через docker compose между двумя серверами python - PullRequest
0 голосов
/ 12 июня 2019

разделение буфера значений типа double между двумя веб-серверами python (сборщиком и калькулятором) через docker-compose

Я пытаюсь просто отправить буфер или массив целых чисел с сервера python, называемого collector, на другой, называемый collectorкалькулятор.Сервер калькулятора должен выполнять простой математический алгоритм.Это все испытание.Сценарии Python для сборщика и калькулятора запускаются в docker-compose в двух контейнерах и предназначены для подключения к одной и той же сети.

Сценарий Python для сборщика


app=Flask(__name__)

@app.route('/')
def index():
    d={"my_number": list(range(10))}
    return jsonify(d)

Сценарий Python для калькулятора

import requests

r=requests.get('https://collector:5000')

app = Flask(__name__)
@app.route('/')
def index():
    numbers_array = r.json()["my_numbers"]
    x=numbers_array[1] + numbers_array[2]
    return '{}'.format(x)

docker-compose.yml


services:
  collector:
    build: .
    env_file:
      - collector.env
    ports:
      - '5000:5000'
    volumes:
      - '.:/app'
    networks:
      - my_network



  calculator:
    build: ./calculator
    depends_on:
      - collector
    env_file:
      - calculator.env
    ports:
      - '5001:5000'
    volumes:
      - './calculator:/app'
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

Dockerfile для обоих изображений одинаков

FROM python:2.7-slim

RUN mkdir /app
WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

LABEL maintainer="Mahmoud KD"

VOLUME ["/app/public"]

CMD flask run --host=0.0.0.0 --port=5000

когда я запускаю docker-compose up --build, первый сервер,Сборщик возможен на моем компьютере и работает нормально.Второй сервер, калькулятор, не может подключиться к коллектору через request.get.Я пытался пропинговать коллектор из контейнера калькулятора, пока docker-compose запускает два контейнера, а эхо-запрос не работает, он говорит: «Исполняемый файл не найден в PATH: неизвестно».кажется, что соединение двух контейнеров не установлено, хотя при проверке my_network показываются два контейнера.Может ли любое тело сказать мне, что я делаю не так.Я очень благодарен ...

1 Ответ

0 голосов
/ 12 июня 2019

Используйте expose вместо

одно приложение на порту 5000 другое на порту 5001

docker-compose:

приложение 1:

expose:
  - 5000

приложение 2:

expose:
  - 5001  

убедитесь, что вы запускаете приложенияс ip = 0.0.0.0

Если вы хотите получить доступ к приложению 2 с хост-машины, перенаправьте порты

app2:

expose:
  - 5001
ports:
  - 80:5001

Объяснение:

Expose показывает только порты в мире докеров.Таким образом, если вы выставите контейнер A на порт 8888, все другие контейнеры смогут получить доступ к этому контейнеру в этом порту.Но вы никогда не получите доступ к нему с хост-компьютера.

Стандартная процедура заключается в том, что вы перенаправляете только один порт, то есть 80 из соображений безопасности, а остальная часть трафика недоступна из внешнего мира


Также измените dockerfile.Вам не нужны жестко закодированные порты


Редактировать:

Также избавьтесь от этого

volumes:
  - '.:/app'

Это может вызвать дополнительныенеполадки


Рабочий пример: - работает, но предоставленное приложение содержит ошибки

docker-compose.yml

version: '3.5'

services:
  collector:
    container_name: collector
    build:
      context: collector/.
    ports:
      - '80:5555'
    expose:
      - '5555'


  calculator:
    container_name: calculator
    build:
      context: calculator/.
    depends_on:
      - collector
    expose:
      - 6666
    ports:
      - '81:6666'
    volumes:
      - './calculator:/app'

Youможет получить доступ к обеим конечным точкам через порты 80 и 81. Связь между обеими конечными точками скрыта от нас, и это на 5555 и 6666. Если вы закроете 81 (или 80), вы можете получить доступ к другой конечной точке только как «прокси»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...