Jak uruchomić Celery i RabbitMQ w kontenerze dokowania? Czy możesz wskazać mi przykładowy plik dokera lub skomponować pliki?
Oto co mam:
Dockerfile:
FROM python:3.4
ENV PYTHONBUFFERED 1
WORKDIR /tasker
ADD requirements.txt /tasker/
RUN pip install -r requirements.txt
ADD . /tasker/
docker-compose.yml
rabbitmq:
image: tutum/rabbitmq
environment:
- RABBITMQ_PASS=mypass
ports:
- "5672:5672"
- "15672:15672"
celery:
build: .
command: celery worker --app=tasker.tasks
volumes:
- .:/tasker
links:
- rabbitmq:rabbit
Kwestia, którą mam, nie może skłonić Celery do pozostania przy życiu lub biegania.
Odpowiedzi:
2 dla odpowiedzi № 1Aktualizacja 2018, as skomentowane poniżej przez Floran Gmehlin, Obraz selera jest obecnie oficjalnie przestarzały na rzecz oficjalny obraz Pythona.
Jak skomentowano seler / problem 1:
Używanie tego obrazu wydaje się śmieszne. Jeśli masz kontener aplikacji, jak zwykle w Django, potrzebujesz wszystkich zależności (rzeczy, które importujesz)
tasks.py
) ponownie zainstalowany w tym kontenerze.Dlatego inne projekty (np. Cookiecutter-django) ponownie użyj kontenera aplikacji dla selera i uruchom tylko inne polecenie (polecenie:
celery ... worker
) przeciwkodocker-compose
.
Uwaga, teraz docker-compose.yml
jest nazywany local.yml
I użyć start.sh
.
Oryginalna odpowiedź:
Możesz spróbować naśladować urzędnika seler Dockerfile, który ma nieco więcej ustawień przed CMD ["celery", "worker"]
.
Widzieć wykorzystanie tego obrazu uruchomić go poprawnie.
założyć pracownika selera (RabbitMQ Broker)
$ docker run --link some-rabbit:rabbit --name some-celery -d celery
sprawdź status klastra
$ docker run --link some-rabbit:rabbit --rm celery celery status
Jeśli możesz użyć tego obrazu w komponencie dokera, możesz spróbować zbudować własny start FROM celery
zamiast FROM python
.
2 dla odpowiedzi nr 2
Mam podobny problem z wychodzeniem z Selera podczas dokowania aplikacji. Powinieneś użyć nazwy usługi królika (w twoim przypadku jest to rabbitmq
) jako nazwę hosta w konfiguracji selera.
posługiwać się broker_url = "amqp://guest:guest@rabbitmq:5672//"
zamiast broker_url = "amqp://guest:guest@localhost:5672//"
.
W moim przypadku głównymi elementami są Flask, Celery i Redis.My problem to TUTAJ sprawdź link, może ci się przydać.
1 dla odpowiedzi nr 3
coś, czego użyłem w moim docker-compose.yml. mi to pasuje. sprawdź szczegóły w tym średni
version: "2"
services:
rabbit:
hostname: rabbit
image: rabbitmq:latest
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=mypass
ports:
- "5672:5672"
worker:
build:
context: .
dockerfile: dockerfile
volumes:
- .:/app
links:
- rabbit
depends_on:
- rabbit