无法让我的python应用程序在docker容器中启动
我有以下python代码:无法让我的python应用程序在docker容器中启动,python,docker,apache-kafka,docker-compose,Python,Docker,Apache Kafka,Docker Compose,我有以下python代码: 从数据管道.scraper\u处理器导入scraper处理器 def main(): 打印(“欢迎使用主功能”) sp=刮片处理器() sp.parse_消息() 如果名称=“\uuuuu main\uuuuuuuu”: main() 其中ScraperProcessor为以下类别: 来自数据管道帐户导入帐户 从输入导入列表开始 从卡夫卡进口卡夫卡消费品 类刮片处理器: 定义初始化(自): self.\u consumer=KafkaConsumer('test',
从数据管道.scraper\u处理器导入scraper处理器
def main():
打印(“欢迎使用主功能”)
sp=刮片处理器()
sp.parse_消息()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
其中ScraperProcessor为以下类别:
来自数据管道帐户导入帐户
从输入导入列表开始
从卡夫卡进口卡夫卡消费品
类刮片处理器:
定义初始化(自):
self.\u consumer=KafkaConsumer('test',bootstrap\u 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 file和main.py文件,但是当我使用docker compose up运行整个过程时,
postgres_db和kafka服务器似乎按预期运行,但docker化的python容器立即退出:
leumiprocessor_parse-engine_1 exited with code 0
你能帮我理解我做错了什么吗
leumiprocessor_parse-engine_1已退出,代码为0
应用程序似乎没有错误,因为容器退出时代码0
。CMD
或docker compose
有问题。或者可能是main.py运行并在完成后死亡的情况,为了使容器正常运行,主进程应该运行,所以
您是否可以检查在您的应用程序中是否启用tty选项(请参阅参考)
docker-compose.yml文件容器是否保持运行
或者您也可以尝试在compose文件中指定CMD
parse-engine:
build: .
depends_on:
- "kafka"
- "postgres_db"
command: "python main.py"
CMD
或entrypoint
的生命周期是容器的生命周期,因此,如果运行容器后python脚本死亡,容器最终将死亡。如果Kafka未运行,此行是否会导致异常?:self.\u consumer=KafkaConsumer('test',bootstrap\u servers='Kafka:9092'))
我猜卡夫卡还没起床。将其放入dependens_on
并不意味着docker compose将等待Kafka运行,它将等待容器启动。在python代码中使用wait it.sh
或添加time.sleep(60)
,您也可以使用docker logs container\u name
Hmm进行检查,尽管我在解析引擎容器的docker日志{container\u ID}中仍然没有看到我的任何打印内容。第一个包含函数main
的python文件是文件名“main.py”?ScraperProcessor
上的parse\u message
看起来像什么?如果在接收消息时没有阻塞,程序将终止。在没有进一步信息的情况下,Python程序似乎只是正常运行到退出。
parse-engine:
build: .
depends_on:
- "kafka"
- "postgres_db"
command: "python main.py"