【问题标题】:Django Channels, Docker Compose, Errno 111] Connect call failed ('127.0.0.2', 6379)Django Channels、Docker Compose、Errno 111] 连接调用失败('127.0.0.2',6379)
【发布时间】:2020-09-14 11:37:12
【问题描述】:

我正在关注https://channels.readthedocs.io/en/latest/tutorial/part_2.html 上的 Django 频道教程

我正在使用docker-compose搭建redis服务器:

docker-compose.yml

  redis:
    image: "redis:alpine"

    command: redis-server --requirepass letmein

    ports:
     - "6379:6379"

    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf


    environment:
     - REDIS_REPLICATION_MODE=master

    networks:
      node_net:
        ipv4_address: 127.0.0.2

networks:
  node_net:
    ipam:
    driver: default
  config:
    - subnet: 127.0.0.0/16

当试图测试与

的连接时
async_to_sync(channel_layer.send)('test_channel', {'type': 'hello'})

我得到了错误

`File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.6/site-packages/asgiref/sync.py", line 120, in __call__
    return call_result.result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 425, in result
    return self.__get_result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/usr/local/lib/python3.6/site-packages/asgiref/sync.py", line 180, in main_wrap
    result = await self.awaitable(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/channels_redis/core.py", line 299, in send
    async with self.connection(index) as connection:
  File "/usr/local/lib/python3.6/site-packages/channels_redis/core.py", line 835, in __aenter__
    self.conn = await self.pool.pop()
  File "/usr/local/lib/python3.6/site-packages/channels_redis/core.py", line 73, in pop
    conns.append(await aioredis.create_redis(**self.host, loop=loop))
  File "/usr/local/lib/python3.6/site-packages/aioredis/commands/__init__.py", line 175, in create_redis
    loop=loop)
  File "/usr/local/lib/python3.6/site-packages/aioredis/connection.py", line 113, in create_connection
    timeout)
  File "/usr/local/lib/python3.6/asyncio/tasks.py", line 339, in wait_for
    return (yield from fut)
  File "/usr/local/lib/python3.6/site-packages/aioredis/stream.py", line 24, in open_connection
    lambda: protocol, host, port, **kwds)
  File "/usr/local/lib/python3.6/asyncio/base_events.py", line 794, in create_connection
    raise exceptions[0]
  File "/usr/local/lib/python3.6/asyncio/base_events.py", line 781, in create_connection
    yield from self.sock_connect(sock, address)
  File "/usr/local/lib/python3.6/asyncio/selector_events.py", line 439, in sock_connect
    return (yield from fut)
  File "/usr/local/lib/python3.6/asyncio/selector_events.py", line 469, in _sock_connect_cb
    raise OSError(err, 'Connect call failed %s' % (address,))
ConnectionRefusedError: [Errno 111] Connect call failed ('127.0.0.2', 6379)`

Docker [Errno 111] Connect call failed ('127.0.0.1', 6379) 上提供的建议描述了将 127.0.0.1:6379 更改为 redis:6379。然而,目前还不清楚这种变化应该发生在哪里:

在我的settings.py 中?

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

或在我的docker-compose.yml 中?还是别的地方?提前谢谢你:)

【问题讨论】:

    标签: django python-3.x redis docker-compose django-channels


    【解决方案1】:

    你有 '127.0.0.2' 而不是 '127.0.0.1' 本地主机

    【讨论】:

    • 我的目标是访问redis docker容器内的redis服务器,我绑定到redis的地址(在redis容器的IP命名空间内)是127.0.0.2。这是在我的 redis.conf 中定义的。问题是,django web 容器上的 localhost 与 redis 容器的 localhost 不同。这同样适用于 127.0.0.2。我不确定如何从 django web 容器访问 redis 地址空间。很高兴为清楚起见进行详细说明,并感谢您的回复:)
    猜你喜欢
    • 2020-05-15
    • 2019-11-28
    • 2019-04-14
    • 1970-01-01
    • 2021-07-03
    • 2021-06-25
    • 2017-02-21
    • 2022-06-29
    • 2011-08-13
    相关资源
    最近更新 更多