gpt4 book ai didi

docker - 无法使用 docker-compose 启动 Celery

转载 作者:行者123 更新时间:2023-12-03 15:50:02 42 4
gpt4 key购买 nike

我有带有 Celery worker 和 Redis 的 Flask 应用程序,它在本地机器上运行时按预期正常工作。然后我尝试 Dockerize 应用程序。当我尝试使用 sudo docker-compose up 构建/启动服务(即 flask 应用程序、Celery 和 Redis)时所有服务都在运行,除了 Celery 并显示错误为

ImportError: No module named 'my_celery'



但是,相同的代码在本地机器上运行没有任何错误。任何人都可以提出解决方案吗?

Dockerfile
FROM python:3.5-slim
WORKDIR celery_sample
ADD . /celery_sample
RUN pip install -r requirements.txt
EXPOSE 8000

docker-compose.yml
version: "3"
services:

web:
build:
context: .
dockerfile: Dockerfile
command: "python my_celery.py"
ports:
- "8000:8000"
networks:
- webnet
volumes:
- .:/celery_sample

redis:
image: redis
networks:
- webnet


celery:
image: celery:3.1.25
command: "celery worker -A my_celery -l INFO"
volumes:
- .:/celery_sample
networks:
- webnet

networks:
webnet:

要求.txt
flask==0.10
redis
requests==2.11.1
celery==3.1.25

my_celery.py (请忽略逻辑)
from flask import Flask
from celery import Celery
flask_app = Flask(__name__)
celery_app = Celery('my_celery')
celery_app.config_from_object('celeryconfig')



@celery_app.task
def add_celery():
return str(int(10)+int(40))


@flask_app.route('/')
def index():
return "Index Page"

@flask_app.route('/add')
def add_api():
add_celery.delay()
return "Added to Queue"

if __name__ == '__main__':
flask_app.debug = True
flask_app.run(host='0.0.0.0', port=8000)

celeryconfig.py
## Broker settings.
BROKER_URL = 'redis://localhost:6379/0'
## Using the database to store task state and results.
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

最佳答案

首先,不推荐使用 celery 图像,取而代之的是标准 python 图像更多信息 here .
WORKDIR在 Dockerfile 中定义后为所有命令设置工作目录,这意味着您尝试运行的命令将从该目录运行。 celery 的 Docker 镜像将工作目录设置为 /home/user .

由于您的代码安装在 /celery_smaple工作目录是/home/user , Celery 无法找到您的 python 模块。

一种替代方法是 cd 进入挂载目录并执行命令:

celery:
image: celery:3.1.25
command: "cd /celery_sample && celery worker -A my_celery -l INFO"
volumes:
- .:/celery_sample
networks:
- webnet

注意命令

另一种是使用 WORKDIR 创建自己的图像设置为 /celery_sample例如:
FROM python:3.5
RUN pip install celery==3.1.25
WORKDIR /celery_sample

构建您自己的图像后,您可以通过更改 image 来使用撰写文件 celery 服务

编辑

您需要将服务相互链接以进行通信:
version: "3"
services:
web:
build:
context: .
dockerfile: Dockerfile
command: "python my_celery.py"
ports:
- "8000:8000"
networks:
- webnet
volumes:
- .:/celery_sample
links:
- redis

redis:
image: redis
networks:
- webnet

celery:
image: celery:3.1.25
command: "celery worker -A my_celery -l INFO"
volumes:
- .:/home/user
networks:
- webnet
links:
- redis

networks:
webnet:

你的配置文件应该是:
## Broker settings.
BROKER_URL = 'redis://redis:6379/0'
## Using the database to store task state and results.
CELERY_RESULT_BACKEND = 'redis://redis:6379/0'

一旦您在撰写文件中链接了服务,您就可以通过使用服务名称作为主机名来访问该服务。

关于docker - 无法使用 docker-compose 启动 Celery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45242894/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com