Не могу заставить мое приложение на python запускаться в докере - PullRequest
2 голосов
/ 26 сентября 2019

У меня есть следующий код Python:

from data_pipeline.scraper_processor import ScraperProcessor


def main():
    print("Welcome to The Main function")
    sp = ScraperProcessor()
    sp.parse_message()


if __name__ == "__main__":
    main()

Где ScraperProcessor - это следующий класс:

from data_pipeline.Account import Account
from typing import List
from kafka import KafkaConsumer


class ScraperProcessor:
    def __init__(self):
        self._consumer = KafkaConsumer('test',bootstrap_servers='kafka:9092')

У меня есть следующий Dockerfile:

FROM python:3.5-alpine3.9
ADD . /app
WORKDIR /app
RUN pip install pipenv
RUN pipenv install --system --deploy --ignore-pipfile
CMD ["python","main.py"]

и следующий файл компоновки Docker:

  version: '3.1'

  services:
    postgres_db:
      image: postgres
      restart: always
      environment:
        POSTGRES_USER: admin
        POSTGRES_PASSWORD: admin
        POSTGRES_DB: default_db
      ports:
        - 54320:5432
    zookeeper:
      image: wurstmeister/zookeeper
      ports:
        - "2181:2181"
    kafka:
      image: wurstmeister/kafka
      ports:
        - "9092:9092"
      environment:
        KAFKA_ADVERTISED_HOST_NAME: kafka
        KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
        KAFKA_CREATE_TOPICS: "test:1:1"
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock
    parse-engine:
      build: .
      depends_on:
        - "kafka"
        - "postgres_db"

У меня есть все три файла - Dockerfile, файл Docker-compose и файл main.py в корневом каталоге моего проекта, однако, когда я запускаю все это сdocker-compose up postgres_db и сервер kafka, кажется, работают должным образом, но контейнер dockerized python немедленно выходит из системы:

leumiprocessor_parse-engine_1 exited with code 0

Не могли бы вы помочь мне понять, что я делаю здесь неправильно?

1 Ответ

0 голосов
/ 26 сентября 2019

leumiprocessor_parse-engine_1, завершенный с кодом 0

, похоже, что в приложении нет ошибки, так как контейнер выходит с кодом 0.что-то не так с CMD или docker-compose.Или, может быть, ваш main.py запускается и умирает после завершения, чтобы ваши контейнеры были запущены и работали, основной процесс должен быть запущен, поэтому

Не могли бы вы проверить, включена ли опция tty (см. Ссылку) в вашем файле docker-compose.yml контейнер продолжает работать?

    parse-engine:
      build: .
      depends_on:
        - "kafka"
        - "postgres_db"
      tty: true

Docker-Compose завершился с кодом 0

Или вы также пытаетесьукажите CMD в файле составления

    parse-engine:
      build: .
      depends_on:
        - "kafka"
        - "postgres_db"
      command: "python main.py"

Срок действия CMD или entrypoint - это срок службы контейнера, поэтому в случае, если ваш скрипт на python умрет после запуска контейнера, контейнер в конечном итоге умрет.

...