【问题标题】:Deploy Django Channels with Docker使用 Docker 部署 Django 频道
【发布时间】:2019-08-18 11:39:01
【问题描述】:

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

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

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

一切正常,网络套接字正在接受连接并轻松传输我的数据。对于生产环境,我使用这个 docker config:

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容器名。
  • @KlausD。它是'redis',我仅用于开发环境的本地主机。我的答案中有一个生产配置。
  • 容器名在docker-compose中通常包含下划线。
  • @KlausD。我的 docker 设置应该如何显示?
  • docker ps 或查看docker-compose up 的输出中的名称。

标签: python django docker redis django-channels


【解决方案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

【讨论】: