docker-compose up <service>не запускается <service>правильно - PullRequest
0 голосов
/ 08 января 2019

Контекст: У меня есть система мастер-рабочий в celery + rabbitmq стеке.
Система докернизирована (worker сервис здесь не представлен)

version: '2'
services:
    rabbit:
        hostname: rabbit
        image: rabbitmq:latest
        environment:
            - RABBITMQ_DEFAULT_USER=admin
            - RABBITMQ_DEFAULT_PASS=mypass
        ports:
            - "5672:5672"

    master:
        build:
            context: .
            dockerfile: dockerfile
        volumes:
            - .:/app
        links:
            - rabbit
        depends_on:
            - rabbit

Когда я выполню docker-compose up - все в порядке! enter image description here

Проблемы: Но я не могу использовать docker-compose up, мне нужно использовать docker-compose master и docker-compose worker (две отдельные команды для рабочей и основной машин). Итак, когда я выполняю docker-compose master - контейнер запускается, но зависает! enter image description here

Исследование: Я обнаружил, что оно зависает при отправке задания:
result = longtime_add.delay(count) Где longtime_add - это задача.

Полный код: https://github.com/waryak/MastersDiploma/tree/vlad

Также, пожалуйста, отредактируйте заголовок - я чувствую, что ему нужно более четкое название

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я только что попробовал docker-compose up rabbit master, и это сработало. Это странно, потому что я не вижу внешних различий в журналах брокера или любых других журналах. Также докерская документация заверяла, что все зависимые сервисы будут запущены ...

0 голосов
/ 08 января 2019

Несколько быстрых замечаний: (1) я не увидел ожидаемых выходных сообщений для URL-адреса брокера-производителя, который у вас есть в github; (2) я не смог найти, где /src/network был добавлен в ваш pythonpath; и (3) код, который загружает URL-адрес посредника производителя в celery.py, выглядит неправильно, так как ищет переменную CONFIG, а не PRODUCE_BROKER_URL, как в файле variables.env. Причина, по которой производитель может сделать тайм-аут, заключается в том, что он не может подключиться к брокеру, поэтому вы выберете правильный путь, распечатав URL-адреса продукта и рабочего брокера. Возможно, вам будет проще сначала попробовать жестко кодировать broker_url в производителе:

from celery.app import Celery
app = Celery(broker_url='amqp://admin:mypass/rabbit:56772')
app.send_task(name='messages.tasks.longtime_add', kwargs={})
...