【发布时间】:2020-01-27 02:59:17
【问题描述】:
我有以下 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
你能帮我理解我在这里做错了什么吗?
【问题讨论】:
-
如果 Kafka 没有运行,这条线会导致异常吗?:
self._consumer = KafkaConsumer('test',bootstrap_servers='kafka:9092')我的猜测是 Kafka 还没有运行。把它放在depends_on中并不意味着 docker compose 会等到 Kafka 运行,它会等到该容器启动。 -
使用
wait-for-it.sh或在你的python代码中添加time.sleep(60),你也可以用docker logs container_name检查 -
嗯,尽管我在解析引擎容器的 docker logs {CONTAINER_ID} 中仍然看不到任何打印件
-
第一个包含函数
main-的python文件是文件名“main.py”吗? -
parse_message上的ScraperProcessor是什么样的?如果它没有阻止接收消息,则程序将终止。如果没有更多信息,Python 程序似乎只是正常运行到退出。
标签: python docker apache-kafka docker-compose