Come posso eseguire Celery e RabbitMQ in un contenitore docker? Puoi indicarmi un esempio di file docker o comporre file?
Questo è quello che ho:
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
Il problema che sto avendo è che non posso convincere Celery a rimanere vivo o a correre.
risposte:
2 per risposta № 1Aggiornamento 2018, come commentato di seguito di Floran Gmehlin, L'immagine del sedano è ora ufficialmente deprecata in favore di immagine pitone ufficiale.
Come commentato in sedano / numero 1:
L'uso di questa immagine sembra ridicolo. Se hai un contenitore di applicazioni, come di solito hai con Django, hai bisogno di tutte le dipendenze (cose che importi in
tasks.py
) installato nuovamente in questo contenitore.Ecco perché altri progetti (ad esempio cookiecutter-django) riutilizzare il contenitore dell'applicazione per Celery, e esegui solo un comando diverso (comando:
celery ... worker
) contro di esso condocker-compose
.
Nota, ora il docker-compose.yml
è chiamato local.yml
e usare start.sh
.
Risposta originale:
Puoi provare ed emulare il funzionario sedano Dockerfile, che fa un po 'più di setup prima del CMD ["celery", "worker"]
.
Vedere l'uso di quell'immagine per eseguirlo correttamente.
avviare un operatore di sedano (RabbitMQ Broker)
$ docker run --link some-rabbit:rabbit --name some-celery -d celery
controllare lo stato del cluster
$ docker run --link some-rabbit:rabbit --rm celery celery status
Se puoi usare quell'immagine nella tua docker-compose, puoi provare a creare il tuo proprio inizio FROM celery
invece di FROM python
.
2 per risposta № 2
Ho un problema simile a quello di Celery durante il caricamento dell'applicazione. Dovresti usare il nome del servizio coniglio (nel tuo caso è "s" rabbitmq
) come nome host nella configurazione del tuo sedano. Cos'è,
uso broker_url = "amqp://guest:guest@rabbitmq:5672//"
invece di broker_url = "amqp://guest:guest@localhost:5672//"
.
Nel mio caso, i componenti principali sono Flask, Celery e Redis. Il mio problema è QUI per favore controlla il link, potresti trovarlo utile.
1 per risposta № 3
qualcosa che ho usato nel mio docker-compose.yml. per me funziona. controlla i dettagli in questo medio
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