Socket.gaierror: [Errno -2] Имя или служба неизвестны при попытке установить сокетное соединение с js-клиентом django, запущенным в контейнере docker

1- У меня есть проект django, который запущен в контейнере docker на localhost на порту 8000

2- И у меня есть приложение react, которое запущено на localhost на порту 3000

Я хочу установить сокетное соединение между react app и django с помощью этой команды

react app

const chatSocket = new WebSocket(
    'ws://'
    // + window.location.host
    + 'localhost:8000'
    + '/ws/room/'
    );

    chatSocket.onmessage = function(e) {
      const data = JSON.parse(e.data);

      if (data.message) {
        // document.querySelector('#chat-messages').innerHTML += ('<b>' + data.username + '</b>: ' + data.message + '<br>');
      } else {
        alert('The message is empty!');
      }

    };

    chatSocket.onclose = function(e) {
        console.log('The socket close unexpectadly');
    };


    const handleNewUserMessage = (message) =>{
      chatSocket.send(JSON.stringify({
        'message': message,
        'username': username,
        'room_name': roomName
    }));
    console.log("received");
    }

а файлы django выглядят следующим образом:

asgi.py

import os

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter

from django.core.asgi import get_asgi_application

import chat.routing

from .settings import ASGI_APPLICATION

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Irangard.settings')

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": AuthMiddlewareStack(
        URLRouter(
            chat.routing.websocket_urlpatterns
        )
    )
})

routing.py

from django.urls import path

from chat.consumers import ChatConsumer

websocket_urlpatterns = [
    path('ws/room/', ChatConsumer.as_asgi()),
]

consumers.py


class ChatConsumer(WebsocketConsumer):
    def connect(self):
        # self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_name = 'emad12'
        self.room_group_name = 'chat_%s' % self.room_name

        # Join room
        async_to_sync(self.channel_layer.group_add)(
            self.room_group_name,
            self.channel_name
        )

        self.accept()
    
    def disconnect(self, close_code):
        # Leave room
        async_to_sync(self.channel_layer.group_discard)(
            self.room_group_name,
            self.channel_name
        )
    
    # Receive message from web socket
    def receive(self, text_data):
        data = json.loads(text_data)
        message = data['message']
        username = data['username']
        room = data['room_name']
        user = User.objects.get(username=username)

        async_to_sync(self.save_message)(user, room, message)

        # Send message to room group
        async_to_sync(self.channel_layer.group_send)(
            self.room_group_name,
            {
                'type': 'chat_message',
                'message': message,
                'username': username
            }
        )
    
    # Receive message from room group
    def chat_message(self, event):
        message = event['message']
        username = event['username']
        
        # Send message to WebSocket
        self.send(text_data=json.dumps({
            'message': message,
            'username': username
        }))

    @sync_to_async
    def save_message(self, user, room, message):
        Chat.objects.create(sender=user, room_name=room, message=message)

но я столкнулся с этой ошибкой:

File "/usr/local/lib/python3.9/socket.py", line 954, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
WebSocket DISCONNECT /ws/room/ [172.20.0.1:33238]
WebSocket DISCONNECT /ws/room/ [172.20.0.1:33240]

мой список контейнеров: список контейнеров докера

может ли кто-нибудь помочь мне?

когда я работал в linux все было нормально, но теперь я в windows и столкнулся с ошибкой

Вернуться на верх