Запуск Redis rq worker в Docker

#python #docker #flask #redis #docker-compose

#python #docker #flask #redis #docker-compose

Вопрос:

Я пытаюсь создать очередь задач с помощью redis rq. Я пытался следовать руководству, но я использую docker. Ниже приведен мой код-

app.py

 from flask import Flask, request
import redis
from rq import Queue

import time
app = Flask(__name__)

r = redis.Redis()
q = Queue(connection=r)

def background_task(n):

    """ Function that returns len(n) and simulates a delay """

    delay = 2

    print("Task running")
    print(f"Simulating a {delay} second delay")

    time.sleep(delay)

    print(len(n))
    print("Task complete")

    return len(n)

def index():

    if request.args.get("n"):

        job = q.enqueue(background_task, request.args.get("n"))

        return f"Task ({job.id}) added to queue at {job.enqueued_at}"

    return "No value for count provided"


if __name__ == "__main__":
    app.run()
  

Docker создает файл-

 version: "3.8"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
     
      
  redis:
    image: "redis:alpine"

  

Dockerfile

 FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
  

Всякий раз, когда я запускаю «‘docker-compose up —build»‘ и открываю http://localhost:5000 / Я получаю URL, который не найден
Где я ошибаюсь?
Как предполагается использовать рабочую команду rq в контейнерах docker.

Комментарии:

1. Я новичок в использовании redis в docker, поэтому любые ссылки на учебники также помогут

Ответ №1:

redis:
изображение: «redis: alpine»

Проблема в том, что изображение, указанное в вашем Docker compose YAML, должно быть изображением, созданным вашим Dockerfile.

Поскольку у вас есть файл dockerfile, который вы хотите использовать для этого образа, вы можете указать его в строке, см. Документацию здесь: https://docs.docker.com/compose/compose-file/compose-file-v3 /

версия: «3.9» сервисы: webapp: build: context: ./dir dockerfile: Dockerfile-альтернативные аргументы: buildno: 1

В качестве хорошей практики вместо вызова вашей службы «redis» в файле docker compose вы должны указать пользовательское имя для представления вашего рабочего скрипта.