套接字事件不在docker器容器,docker组成的浏览器中触发

没有dockerizing应用程序,一切工作正常。

将应用程序迁移到Docker时,我无法在浏览器中接收套接字事件。

我能够从浏览器和控制台接收服务器中的套接字事件。

泊坞窗,compose.yml

database: image: mongo:latest container_name: minipool_database ports: - "27017:27017" seed: build: seed container_name: mp_seed links: - database application: (Node v.7.9.0 / socket-io: 1.4.8 / Angular 1.4.9 / angular-socket-io: 0.7.0) build: application container_name: mp_application links: - database ports: - "8080:8080" 

Express服务器

 'use strict'; process.env.NODE_ENV = process.env.NODE_ENV || 'development'; var connection = ''; if(process.env.NODE_ENV === 'development') connection = '127.0.0.1:27017/minipool'; if(process.env.NODE_ENV === 'production') connection = 'database:27017/minipool'; var express = require('express'), app = express(), server = require('http').Server(app), io = require('socket.io')(server); app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*") res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept") next() }); app.use(express.static('./')); app.use(function(req,res,next){ req.io = io; next(); }); server.listen(8080, function() {}); io.on('connection', function(socket){ var User = require('./api/model/api.model.user'); var user_id = ''; // Update socket id on connection socket.on('join', function(data){ user_id = data._id; // Save socket.id on load }); }); 

的index.html

 script(src='/socket.io/socket.io.js') 

angularsockets-IO

 var socket = options.ioSocket || io.connect(); 

我知道我通过套接字引用的方式是closures的,这是一个很好的例子,说明如何能够最小化工作。

在请求中传递套接字引用:

 app.use(function(req,res,next){ req.io = io; next(); }); 

在Express 4中可以正确完成:

 app.set('socketio', io); 

引用路线:

 exports.index = function(req, res) { var io = req.app.get('socketio'); io.to(user.sockets[j]).emit("game-update", { game: game }); }); 

套接字现在在Docker容器中工作。