Docker IO在Docker运行时返回404 Not Found

时间:2018-09-25 15:38:48

标签: node.js docker socket.io

我正在尝试使用SocketIO,Mongodb和NodeJS构建聊天应用程序。当我使用时,Web应用程序可以在:80上成功运行:

  

docker run -d --name mongo mongo

     

docker run --name appname --link mongo:mongo -p 80:3000 -d docker_user / app

但是SocketIO继续在浏览器控制台中发送错误,例如:

GET http://url/socket.io/?EIO=3&transport=polling&t=MOH41PY 404 (Not Found)

我的index.js如下:

var express = require('express');
var http = require('http').Server(app);

const https = require('https');
var io = require('socket.io')(http);
const mongo = require('mongodb').MongoClient;
var request = require('request');
var path = require('path');
var app = express();

// Set Static path...
app.use(express.static(path.join(__dirname, '/public')));


//Connect to mongo...
mongo.connect('mongodb://mongo:27017/team_chat_data', function(err,db){

  if(err){
  throw(err);
}

//Rest of logic...
});

app.listen(3000, function(){
console.log('Server started on port :3000');
});

现在,我正尝试使用index.html通过以下方式连接到服务器:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
<script>     
// Connect to socket.io
var socket = io.connect('http://url:80');
// Check for connection
if(socket !== undefined){
console.log('Connected to socket...');
// Handle Output
socket.on('output', function(data){
console.log(data);
}); 
</script>

我可以在浏览器控制台中看到消息已连接到套接字,但是出现类似以下的错误消息:

GET http://url/socket.io/?EIO=3&transport=polling&t=MOH41PY 404 (Not Found)

1 个答案:

答案 0 :(得分:2)

看起来Socket.IO无法拦截以/socket.io/开头的请求。这是因为在您的情况下,侦听器是应用程序-Express处理程序。您必须使http成为侦听器,以便Socket.IO可以访问请求处理。

尝试更换

var express = require('express'); // line 1

使用

var app = require('express')();

有关详细信息,请参阅文档:https://socket.io/docs/#Using-with-Express

或者,您可以尝试https://socket.io/docs/#Using-with-Node-http-server