2017-11-07 12 views
0

アプリケーションをドッキングしないと、すべて正常に動作します。ソケットイベントがブラウザでドッキングコンテナで起動せず、ドッカーの作成

アプリケーションを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') 

角度ソケット-IO

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

答えて

0

私はソケットリファレンスを渡していた方法を知っていましたが、何かが最小限に機能する方法の良い例です。ここでは、要求におけるソケットの参照を渡す

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

エクスプレス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コンテナにあります。

関連する問題