/ / Docker config: Celery + RabbitMQ - finestra mobile, rabbitmq, sedano, docker-compose, dockerfile

Docker config: Celery + RabbitMQ - docker, rabbitmq, sedano, docker-compose, dockerfile

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 № 1

Aggiornamento 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 con docker-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