2017-11-07 6 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에서 제대로 수행 할 수 있습니다

exports.index = function(req, res) { 
    var io = req.app.get('socketio'); 

    io.to(user.sockets[j]).emit("game-update", { 
      game: game 
     }); 
}); 

소켓 작업 :

app.set('socketio', io); 

이 경로에서 참조 이제 Docker 컨테이너에 있습니다.