【问题标题】:Django channels and docker-compose errorDjango 频道和 docker-compose 错误
【发布时间】:2017-05-23 10:04:00
【问题描述】:

通过 docker 和 docker-compose 运行 runserver 时,出现此错误,无法连接到 django:

django_1            | 2017-01-09 08:24:44,328 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconnect, websocket.receive
django_1            | 2017-01-09 08:24:44,329 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconnect, websocket.receive
django_1            | 2017-01-09 08:24:44,331 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconnect, websocket.receive
django_1            | 2017-01-09 08:24:44,331 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconnect, websocket.receive
django_1            | Unhandled exception in thread started by <function wrapper at 0x7ff06bee5d70>
django_1            | Traceback (most recent call last):
django_1            |   File "/usr/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
django_1            |     fn(*args, **kwargs)
django_1            |   File "/usr/local/lib/python2.7/site-packages/channels/management/commands/runserver.py", line 84, in inner_run
django_1            | Performing system checks...
django_1            | 
django_1            | System check identified no issues (0 silenced).
django_1            | January 09, 2017 - 08:24:44
django_1            | Django version 1.10.4, using settings 'backend.settings'
django_1            | Starting Channels development server at http://0.0.0.0:8000/
django_1            | Channel layer default (asgi_redis.core.RedisChannelLayer)
django_1            | Quit the server with CONTROL-C.
django_1            |     ws_protocols=getattr(settings, 'CHANNELS_WS_PROTOCOLS', None),
django_1            |   File "/usr/local/lib/python2.7/site-packages/daphne/server.py", line 41, in __init__
django_1            |     ''' % self.__class__.__name__)
django_1            | DeprecationWarning: 
django_1            |                 The host/port/unix_socket/file_descriptor keyword arguments to Server are deprecated.
django_1            |             

在本地运行时,一切正常。 这是我的 requirements.txt:

Django==1.10.4 psycopg2==2.6.2 频道==0.17.3 asgi-redis==1.0.0

这是我的 docker-compose 文件:

version: '2' 
  services:
    redis:
      image: redis:3.0-alpine
    postgres:
        image: postgres
    django:
        build: ../backend
        command:  python backend/manage.py runserver 0.0.0.0:8000
        volumes:
            - ../backend:/backend
        ports:
            - "8000:8000"
        depends_on:
            - postgres
            - redis
            - django-migration
    django-migration:
        build: ../backend
        command: python backend/manage.py migrate
        volumes:
          - ../backend:/backend
        depends_on:
          - postgres
    client:
        image: node
        command: bash -c "cd src && npm start"
        ports:
            - "3000:3000"

有什么想法吗?

【问题讨论】:

    标签: django docker redis docker-compose django-channels


    【解决方案1】:

    您的容器之间没有链接。尝试将他们团结到网络中。

    version: '2' 
      services:
        redis:
          image: redis:3.0-alpine
          networks:
           - django-network
    
        postgres:
            image: postgres
            networks:
             - django-network
    
        django:
            build: ../backend
            command:  python backend/manage.py runserver 0.0.0.0:8000
            volumes:
                - ../backend:/backend
            ports:
                - "8000:8000"
            depends_on:
                - postgres
                - redis
                - django-migration
            networks:
             - django-network
    
        django-migration:
            build: ../backend
            command: python backend/manage.py migrate
            volumes:
              - ../backend:/backend
            depends_on:
              - postgres
            networks:
             - django-network
    
        client:
            image: node
            command: bash -c "cd src && npm start"
            ports:
                - "3000:3000"
            networks:
             - django-network
    
         networks:
           tele-cluster-network:
             driver: bridge
    

    【讨论】:

    • 你是什么意思他们没有彼此的链接?我有 99.9% 的把握,因为我可以通过它们的主机名访问任何容器中的所有其他主机。而且我已经成功地使用内存 asgi 运行了这个 docker-compose 文件,现在我已经添加了 redis,它会导致问题。
    • 好的,如果您确定容器已链接,我的回答是错误的。可能是你尝试连接redis的时候,还没启动?
    • 谢谢,同时我也发现了问题,贴在下面
    【解决方案2】:

    原来我使用的是 1.0.0 版本的 daphne,同时我使用的是旧版本的 django 频道,它们不兼容。更新两者都修复了错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-23
      • 2020-06-16
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多