tempaccount as
tempaccount as

Reputation: 193

Unable to Run Celery and celery beat using docker in django application (Unable to load celery application)

when I am trying to run my application I using without docker its working perfectly , but In docker-compose I am getting this error :

               | Error: Invalid value for '-A' / '--app': 
               | Unable to load celery application.
               | The module sampleproject was not found.

my docker-compose file

  app:
    container_name: myapp
    hostname: myapp
    build:
      context: .
      dockerfile: Dockerfile
    image: sampleproject
    tty: true
    command: >
      bash -c "
        python manage.py migrate &&
        python manage.py runserver 0.0.0.0:8000
      "
    env_file: .env
    ports:
      - "8000:8000"
    volumes:
      - .:/project
    depends_on:
      - database
      - redis

  redis:
    image: redis:alpine

  celery:
    build:
      context: ./
      dockerfile: Dockerfile
    command: celery  -A sampleproject worker -l info
    depends_on:
     - database
     - redis

  celery-beat:
    build: .
    command: celery -A sampleproject beat -l info
    depends_on:
      - database
      - redis
      - celery

my Docker file

FROM python:3.8
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt --no-cache-dir \
  && rm -rf requirements.txt

RUN mkdir /project
WORKDIR /project

my folder structure is something like this :

enter image description here

Upvotes: 2

Views: 3981

Answers (1)

vic.py
vic.py

Reputation: 409

I had the same problem and with that we found the solution. In fact, celery is right to complain about not being able to run, as it needs an instance of the application.

For that, it is only necessary to add the volume directive in the docker-compose .yaml file, directing to the project folder, in case into the service celery and celery-beat.

Example:

   app:
    container_name: myapp
    hostname: myapp
    build:
      context: .
      dockerfile: Dockerfile
    image: sampleproject
    tty: true
    command: >
      bash -c "
        python manage.py migrate &&
        python manage.py runserver 0.0.0.0:8000
      "
    env_file: .env
    ports:
      - "8000:8000"
    volumes:
      - .:/project
    depends_on:
      - database
      - redis

  redis:
    image: redis:alpine

  celery:
    build:
      context: ./
      dockerfile: Dockerfile
    command: celery  -A sampleproject worker -l info
    volumes:
      - .:/project
    depends_on:
     - database
     - redis

  celery-beat:
    build: .
    command: celery -A sampleproject beat -l info
    volumes:
      - .:/project
    depends_on:
      - database
      - redis
      - celery

So when the celery container is executed it will see that there is a volume and will execute the project without any problems.

Upvotes: 2

Related Questions