Mam aplikację Flask z operatorem Selera i Redis i działa ona zgodnie z oczekiwaniami podczas pracy na komputerze lokalnym. Następnie próbowałem Dockerize aplikacji. Kiedy próbuje budować/start usługi (czyli aplikacja kolba, selera i Redis) używając sudo docker-compose up
wszystkie usługi są uruchomione z wyjątkiem selera i pokazując błąd jakoNie można uruchomić programu Celery z aplikacją dokowania
ImportError: No module named 'my_celery'
Ale ten sam kod działa na lokalnym komputerze bez jakiekolwiek błędy. Czy ktoś może zaproponować rozwiązanie?
Dockerfile
FROM python:3.5-slim
WORKDIR celery_sample
ADD . /celery_sample
RUN pip install -r requirements.txt
EXPOSE 8000
dokowanym-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 (uprzejmie zignorować logikę)
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'
Po przeczytaniu odpowiedzi wprowadziłem pewne zmiany do mojego projektu. ** 1: ** Zamontował zawartość projektu do usług selera "** WORKDIR ** jako" tom: -.:/Home/user' i pozostaje 'command' niezmieniony ** 2: ** buduję ** usługi selera ** z innym plikiem Docker i wewnątrz tego pliku Dockerfile zainstalowałem ten sam ** requirements.txt **. (stało się tak, ponieważ nie mogłem uruchomić selera bez zależności). ** 3: ** EXPOSEd port 6379 w obu plikach Docker. –
Problem polega na tym, że seler nie mógł znaleźć serwera redis. Błąd to 'celery_1 | [2017-07-22 03: 44: 52,778: ERROR/MainProcess] consumer: Nie można połączyć się z redis: // localhost: 6379/0:. selera_1 | Próbuję ponownie za 12,00 sekund ... '@vedarthk @ Tarun Lalwani –
To zadziałało. Thanx –