python - 无法让我的 python 应用程序在 docker 容器中启动

标签 python docker apache-kafka docker-compose

我有以下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 compose 文件:
  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

你能帮我理解我在这里做错了什么吗?

最佳答案

leumiprocessor_parse-engine_1 exited with code 0



似乎应用程序没有错误,因为容器退出代码 0 . CMD 出了点问题|或 docker-compose .或者可能是您的 main.py 在完成后运行并死掉的情况,以使您的容器启动并运行主进程应该运行,所以

Could you check if enabling the tty option (see reference) in your docker-compose.yml file the container keeps running?


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

Docker-Compose exited with code 0

或者您也尝试在撰写文件中指定 CMD
    parse-engine:
      build: .
      depends_on:
        - "kafka"
        - "postgres_db"
      command: "python main.py"
CMD的生活或 entrypoint是容器的生命周期,所以如果你的 python 脚本在运行容器后死掉了,容器最终也会死掉。

关于python - 无法让我的 python 应用程序在 docker 容器中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123441/

相关文章:

python - 为什么我不需要释放这个内存?

python - Django上传csv文件复制到postgresql表

python - python-xdist 插件是否会导致 pytest_generate_tests 执行多次?

python - 如何使用升级的 python 在 ec2 centos 机器上获取 mysql

docker - Tomcat 的 Nginx Rverse 代理(简单的是……?否)

java - Kafka AVRO 消费者 : MySQL Decimal to Java Decimal

Git 命令在 init 容器中不起作用

docker - 如何从本地访问docker机器中的Kafka?

apache-kafka - 无法描述Kafka Streams Consumer Group

java - 将 Kafka Streams 用作 Kafka Consumer 应用程序中的状态存储