Я знаю, как установить связь между сервером и клиентом с моей локальной машины. Но я не могу понять, где я должен копаться, чтобы выполнить это из моего контейнера докеров. Я всегда получаю net::ERR_CONNECTION_REFUSED
Tornado 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 во время эксперимента).