django - Docker Redis Django 连接被拒绝

标签 django docker redis docker-compose django-cache

我正在使用 Django REST Framework、Django、Postgres 作为数据库并使用 Redis 作为缓存来编写项目。我想 dockerize 我的项目。 但是 Redis 不想访问连接。 Django 设置:

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"

当我运行命令来启动容器时,会出现以下警告:

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

当我尝试对使用 Redis 进行缓存的端点执行 GET 请求时出现异常:

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

也许有人遇到过类似的问题?

最佳答案

将连接字符串更改为以下 -

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

对于投票服务容器,127.0.0.1 是投票容器本身。在使用 docker compose 容器时,始终可以通过使用它们的服务名称访问它们,例如 redis polls postgres

关于django - Docker Redis Django 连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51857501/

相关文章:

python - 如何进行这样复杂的查找?

python - 将帖子中提到的用户名作为个人资料链接返回到帖子内的这些用户

python - 从 python 启动 docker 容器弄乱了终端设置

docker - 容器变换给出缺少图像参数错误

python - Django 形成 HTML5 验证模式

python - 集群中的 Django CSRF

docker - kube-controller-manager 将一个 pod 从关闭节点迁移到另一个运行状况节点需要多长时间

redis - Chicago_boss 和 redis 配置

django - Redis 告诉我 "Failed opening .rdb for saving: Permission denied"

redis - IBM Bluemix Public 上 Compose for Redis 的安全/TLS 支持?