2016-12-05 3 views
0

Я знаю, как установить связь между сервером и клиентом с моей локальной машины. Но я не могу понять, где я должен копаться, чтобы выполнить это из моего контейнера докеров. Я всегда получаю net::ERR_CONNECTION_REFUSEDTornado websocket in docker (net :: ERR_CONNECTION_REFUSED)

Вот мой клиент сторона client.html:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <script> 

     ws = new WebSocket("ws://localhost:8888/ws"); 

     ws.onmessage = function(evt) { 
      console.log("Message Received: " + evt.data) 
     } 
     ws.onopen = function(evt) { 
      console.log("***Connection Opened***"); 
     } 
     ws.onclose = function(evt) { 
      console.log("***Connection Closed***"); 
     } 

    </script> 
</head> 

</html> 

А вот мой простой смерч решение WebSocket server.py:

import tornado.httpserver 
import tornado.websocket 
import tornado.ioloop 
import tornado.web 
import socket 


class WSHandler(tornado.websocket.WebSocketHandler): 
    def open(self): 
     print ('new connection') 
     if self not in wss: 
      wss.append(self) 

    def on_message(self, message): 
     print ('message received: %s' % message) 
     # Reverse Message and send it back 
     print ('sending back message: %s' % message[::-1]) 
     self.write_message(message[::-1]) 

    def on_close(self): 
     print ('connection closed') 
     if self in wss: 
      wss.remove(self) 

    def check_origin(self, origin): 
     return True 


application = tornado.web.Application([ 
    (r'/ws', WSHandler), 
]) 


if __name__ == "__main__": 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(8888) 
    myIP = socket.gethostbyname(socket.gethostname()) 
    print ('*** Websocket Server Started at %s***' % myIP) 
    main_loop = tornado.ioloop.IOLoop.instance() 
    main_loop.start() 

Я бегу python3 server.py. Получите *** Websocket Server Started at 5.255.232.98***. Затем, когда я открываю client.html в браузере (только файл) и печатаю на консоли ws.send('hooray'), я получаю обратный вариант Message Received: yarooh. Все в порядке.


Затем я пытаюсь запустить мой server.py из грузчика. я бегу Docker контейнер:

docker run -ti -d -p 80:80 -v <path to server.py folder>:/root --name <my_name> <my_container> 

А затем запустить python3 server.py. Получайте: *** Websocket Server Started at 172.17.0.2***. Итак, когда я открываю client.html снова, я получаю следующее сообщение об ошибке:

client.html:7 WebSocket connection to 'ws://localhost:8888/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED 

Я думаю, эта проблема должна быть в моем docker run -p 80:80 вариант, но я не знаю, как это исправить. Мне нужно docker run -p 80:80, потому что в нем есть сервер django (я не запускаю nginx и Django во время эксперимента).

ответ

0

Найдено ответ довольно 15 минут после размещения, но часов серфинга до :)

Если добавить только -p 8888:8888 к моему выражению докер выполнения. Результат: docker run -ti -d -p 80:80 -p 8888: 8888 -v:/корень - имя

 Смежные вопросы

  • Нет связанных вопросов^_^