Django docker container не смог подключиться к серверу redis на порту 6379

У меня есть контейнер redis, работающий на порту 6379, но мое приложение django не может подключиться к этому порту.

CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS          PORTS                                       NAMES
f62c020fec99   sp_ask_dashboard_celery_worker   "sh -c 'cd sp_dashbo…"   39 minutes ago   Up 39 minutes                                               sp_ask_admin_dashboard-master_celery_worker_1
60089763fd3f   ask_webapp                       "sh -c 'python sp_da…"   39 minutes ago   Up 39 minutes   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   ask_dashboard_web
62cde1811827   postgres:14.0-alpine             "docker-entrypoint.s…"   39 minutes ago   Up 39 minutes   5432/tcp                                    sp_ask_admin_dashboard-master_db_1
24adadf28ba2   redis:6-alpine                   "docker-entrypoint.s…"   39 minutes ago   Up 39 minutes   6379/tcp                                    sp_ask_admin_dashboard-master_redis_1

Когда я вхожу в свой контейнер webapp (ask_webapp). Я попробовал следующее решение, чтобы выяснить, могу ли я подключиться к Redis через "python manage.py shell" внутри моего контейнера. И я получаю эту ошибку:

"OperationalError: Ошибка -3 при подключении к redis:6379. Временный сбой при разрешении имен."

".

Мой settings.py включает:

CELERY_BROKER_URL = "redis://redis:6379/0"
CELERY_RESULT_BACKEND = "redis://redis:6379/0"

Эта информация также находится в файле .env.dev

Мой docker-compose.yml выглядит следующим образом:

  celery_worker:
    build:
      context: .
      dockerfile: ./sp_dashboard/DockerfileBuild
    image: sp_ask_dashboard_celery_worker
    command: >
      sh -c "cd sp_dashboard ; celery -A settings worker -l INFO"
    volumes:
      - .:/usr/src/app/
    env_file:
      - ./.env.dev
    environment:
      - POSTGRES_USER=hello_django
      - POSTGRES_PASSWORD=hello_django
      - POSTGRES_DB=hello_django_dev
      - "POSTGRES_HOST_AUTH_METHOD=trust"
    depends_on:
      - redis
      - db
      - web

Ваш контейнер redis в docker-compose.yml отсутствует djangonetwork он должен выглядеть примерно так. Вы должны применить ту же логику к Celery worker, если ему нужно подключиться к redis.

  redis:
    image: redis:6-alpine
    networks:
      - djangonetwork

Пояснение: Внутренний DNS docker работает только в сетях, определенных пользователем. Вы не можете вызвать другой контейнер в другой сети, определенной пользователем, через Name.

Вернуться на верх