7

I'm writing the project using Django REST Framework, Django, Postgres as database and Redis as caching. I want to dockerize my project. But Redis doesn't want to access connection. Django settings:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

docker-compose.yml:

services:

  postgres:
    image: postgres:latest
    env_file:
      - ./src/main/.env
    volumes:
      - ./scripts/postgres:/docker-entrypoint-initdb.d

  polls:
    build: .
    volumes:
      - .:/code
    env_file:
      - ./src/main/.env
    ports:
      - "8000:8000"
    depends_on:
      - postgres
      - redis
    command: ./scripts/wait_for_it.sh

  redis:
    restart: always
    image: redis:3.2.0
    expose:
      - "6379"

When I run command to up containers there are follow warnings:

polls_cache | 1:M 15 Aug 10:47:36.719 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
polls_cache | 1:M 15 Aug 10:47:36.720 # Server started, Redis version 3.2.0
polls_cache | 1:M 15 Aug 10:47:36.720 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
polls_cache | 1:M 15 Aug 10:47:36.720 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
polls_cache | 1:M 15 Aug 10:47:36.720 * The server is now ready to accept connections on port 6379

And when I try to do GET request to the endpoint where I'm using Redis for caching there is exception:

ConnectionError at /question/top/
Error 111 connecting to 127.0.0.1:6379. Connection refused.
...

Maybe someone had a similar problem?

1 Answers1

17

Change connection string to below -

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://redis:6379/',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

For Polls service container, 127.0.0.1 is the polls container itself. While using docker compose containers are always reachable by using their service names like redis polls postgres.

vivekyad4v
  • 13,321
  • 4
  • 55
  • 63
  • 1
    That is, change the `127.0.0.1` in the `LOCATION` key to point to the hostname of the Redis container, `redis`. – AKX Aug 15 '18 at 11:24