使用Docker部署Django Channels

9

我正在尝试使用Docker部署Django Channels,但Django似乎找不到Redis(我正在将其用作通道层)。

在本地运行时,我只需运行redis-server并从设置中指向它:

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        'CONFIG': {
            'hosts': [('localhost', 6379)],
        },
    },
}

一切正常,Web套接字接受连接并轻松传输我的数据。对于生产环境,我使用以下Docker配置:

version: "3"

services:

  backend:
    container_name: backend
    restart: 'on-failure'
    image: registry.testtesttest.com/app/backend:${BACKEND_VERSION:-latest}
    ports:
      - "8000:8000"
    environment:
      DJANGO_SETTINGS_MODULE: ${DJANGO_SETTINGS_MODULE:-settings.production}
      DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev}

    redis:
        image: "redis:alpine"
        ports: 
           -"6379:6379"

我从生产设置中指向Redis:

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        'CONFIG': {
            'hosts': [('redis', 6379)],
        },
    },
}

在生产环境中,Django 报错:

无法在 127.0.0.1:6379 找到 Redis

我做错了什么?我需要在 docker-compose 文件中添加额外的服务吗?


'localhost' 更改为 Redis 容器名称。 - Klaus D.
@KlausD,这是“redis”,我只在开发环境中使用本地主机。我的回答中有一个生产配置。 - Desiigner
在docker-compose中,容器名称通常包含下划线。 - Klaus D.
@KlausD. 我的 Docker 设置应该如何显示? - Desiigner
docker ps 或者在 docker-compose up 的输出中查看名称。 - Klaus D.
1个回答

1

您需要为后端提供链接。

backend:
    container_name: backend
    restart: 'on-failure'
    image: registry.testtesttest.com/app/backend:${BACKEND_VERSION:-latest}
    ports:
      - "8000:8000"
    environment:
      DJANGO_SETTINGS_MODULE: ${DJANGO_SETTINGS_MODULE:-settings.production}
      DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev}
    links:
     - redis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接