TimeoutError:[Errno 110]尝试在Docker中连接到Redis服务时,连接呼叫失败

问题描述 投票:0回答:1

我正在将使用Django Channels用于websocket功能的Web应用程序进行docker化。这取决于redis。我无法让应用程序的redis部分正常工作。我尝试坚持[C0​​]。

this redis/compose guide

docker-compose.yml

version: "3" services: db: image: mysql:latest volumes: - "./.mysql-data/db:/var/lib/mysql" restart: always ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: database MYSQL_USER: user MYSQL_PASSWORD: password networks: - hostnetwork backend: build: ./backend command: daphne -b 0.0.0.0 -p 8000 main.asgi:application volumes: - ./backend:/code ports: - "8000:8000" depends_on: - db links: - redis redis: image: "redis:alpine" command: redis-server ports: - "6379:6379" volumes: - ./redis-data:/var/lib/redis <-- This dir doesn't exist on host machine - ./redis.conf:/usr/local/etc/redis/redis.conf <-- I created this file manually on host machine environment: - REDIS_REPLICATION_MODE=master networks: node_net: ipv4_address: 172.28.1.4 frontend: build: ./frontend ports: - "3000:3000" volumes: - ./frontend:/usr/src/app stdin_open: true networks: hostnetwork: external: true node_net: ipam: driver: default config: - subnet: 172.28.0.0/16

settings.py

使用以上配置,我的容器启动,并且redis最初不会出现任何错误,但是websocket使用者从未收到或发送任何消息。一分钟左右后,出现以下错误:

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [
                (os.environ.get('REDIS_HOST', "172.28.1.4"),
                 os.environ.get('REDIS_PORT', 6379))
            ],
        },
    },
}

是什么原因导致backend_1 | File "/usr/local/lib/python3.8/asyncio/selector_events.py", line 494, in sock_connect backend_1 | return await fut backend_1 | File "/usr/local/lib/python3.8/asyncio/selector_events.py", line 526, in _sock_connect_cb backend_1 | raise OSError(err, f'Connect call failed {address}') backend_1 | TimeoutError: [Errno 110] Connect call failed ('172.28.1.4', 6379) 以及服务器和Redis之间显然缺乏通信?我如何让两个人说话?

redis docker-compose port django-channels
1个回答
0
投票

此答案使我了解了解决问题所需的知识。我只是删除了:

TimeoutError

并将 networks: node_net: ipv4_address: 172.28.1.4 更改为此:

CHANNEL_LAYERS

我想这使我的服务可以通过CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [ (os.environ.get('REDIS_HOST', "redis"), <--- os.environ.get('REDIS_PORT', 6379)) ], }, }, } 创建的桥接网络进行通信。

© www.soinside.com 2019 - 2024. All rights reserved.