finn lee
finn lee

Reputation: 1

celery cannot connect to redis in docker:kombu.exceptions.OperationalError: Error -3 connecting to redis:6379. Lookup timed out

I'm building a Websocket service in Django, and I chose celery to push messages。But when I run celery using eventlet on the online server, the following error occurred:

Traceback (most recent call last):
  File "/usr/local/bin/celery", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/__main__.py", line 15, in main
    sys.exit(_main())
             ^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/bin/celery.py", line 236, in main
    return celery(auto_envvar_prefix="CELERY")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/bin/base.py", line 134, in caller
    return f(ctx, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/bin/worker.py", line 348, in worker
    worker = app.Worker(
             ^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/worker/worker.py", line 93, in __init__
    self.app.loader.init_worker()
  File "/usr/local/lib/python3.12/site-packages/celery/loaders/base.py", line 110, in init_worker
    self.import_default_modules()
  File "/usr/local/lib/python3.12/site-packages/celery/loaders/base.py", line 104, in import_default_modules
    raise response
  File "/usr/local/lib/python3.12/site-packages/celery/utils/dispatch/signal.py", line 276, in send
    response = receiver(signal=self, sender=sender, **named)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/fixups/django.py", line 97, in on_import_modules
    self.worker_fixup.validate_models()
  File "/usr/local/lib/python3.12/site-packages/celery/fixups/django.py", line 135, in validate_models
    self.django_setup()
  File "/usr/local/lib/python3.12/site-packages/celery/fixups/django.py", line 131, in django_setup
    django.setup()
  File "/usr/local/lib/python3.12/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python3.12/site-packages/django/apps/registry.py", line 124, in populate
    app_config.ready()
  File "/var/IBMS/NewServer/function/apps.py", line 22, in ready
    active_tasks = i.active()
                   ^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/app/control.py", line 149, in active
    return self._request('active', safe=safe)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/app/control.py", line 106, in _request
    return self._prepare(self.app.control.broadcast(
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/celery/app/control.py", line 776, in broadcast
    return self.mailbox(conn)._broadcast(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/kombu/pidbox.py", line 330, in _broadcast
    chan = channel or self.connection.default_channel
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/kombu/connection.py", line 953, in default_channel
    self._ensure_connection(**conn_opts)
  File "/usr/local/lib/python3.12/site-packages/kombu/connection.py", line 458, in _ensure_connection
    with ctx():
  File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/usr/local/lib/python3.12/site-packages/kombu/connection.py", line 476, in _reraise_as_library_errors
    raise ConnectionError(str(exc)) from exc
kombu.exceptions.OperationalError: Error -3 connecting to redis:6379. Lookup timed out.

docker-compse:

services:
  redis:
    image: redis:5
    command: redis-server /etc/redis/redis.conf
    volumes:
      - function_redis_vol:/data
      - ./compose/redis/redis.conf:/etc/redis/redis.conf
    ports:
      - "6379:6379"
    restart: always
  
  
    web:
    build: .
    command: ./start.sh
    expose:
      - "8000"
    volumes:
        ……
    links:
      - db
      - redis
    depends_on:
      - db
      - redis
    environment:
      - DEBUG=False
    restart: always
    tty: true
    stdin_open: true

start.sh:

python manage.py runserver 0.0.0.0:8000

celery -A ~ worker -l info -P eventlet -c 20

version:

I tried to run celery in other ways and found that I could connect to redis using threads or prefork.

Upvotes: 0

Views: 175

Answers (0)

Related Questions