Tôi có ứng dụng Flask với công nhân Celery và Redis và nó hoạt động bình thường như mong đợi khi chạy trên máy cục bộ. Sau đó, tôi đã cố gắng để Dockerize ứng dụng. Khi tôi cố gắng xây dựng/khởi động dịch vụ (ví dụ, ứng dụng bình, cần tây, và Redis) sử dụng sudo docker-compose up
tất cả các dịch vụ đang chạy trừ cần tây và hiển thị một lỗi nhưkhông thể khởi động Celery với docker-compose
ImportError: No module named 'my_celery'
Nhưng, cùng mã làm việc tại máy cục bộ mà không bất kỳ lỗi nào. Bất kỳ ai có thể đề xuất giải pháp?
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:
requirements.txt
flask==0.10
redis
requests==2.11.1
celery==3.1.25
my_celery.py (vui lòng bỏ qua logic)
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'
Tôi đã thực hiện một số thay đổi đối với dự án của mình sau khi đọc câu trả lời của bạn. ** 1: ** Đã gắn nội dung của dự án vào các dịch vụ cần tây '** WORKDIR ** dưới dạng 'tập: -.:/Home/user' và vẫn là lệnh' không thay đổi ** **: ** I build ** ** với Dockerfile khác và bên trong Dockerfile tôi đã cài đặt cùng ** requirements.txt **. (điều này được thực hiện bởi vì tôi không thể chạy công nhân cần tây mà không có sự phụ thuộc). ** 3: ** TỪ KHÓA cổng 6379 trong cả hai Dockerfiles. –
Bây giờ vấn đề là cần tây không thể tìm thấy máy chủ redis. Lỗi là 'celery_1 | [2017-07-22 03: 44: 52,778: ERROR/MainProcess] người tiêu dùng: Không thể kết nối với redis: // localhost: 6379/0:. celery_1 | Thử lại sau 12 giây ... '@vedarthk @Tarun Lalwani –
Đã hoạt động. Thanx –