如何从浏览器连接到另一个容器上运行的socket.io服务器

时间:2019-01-10 12:04:12

标签: docker socket.io docker-compose

我有一个带有2个容器的docker设置,一个用于服务器的nginx和一些应用程序,在该应用程序的端口6001上,我正在运行一个socket.io服务器,还为nginx定义了一个虚拟主机。

如何从浏览器访问端口6001上的应用程序?

我尝试在两个容器上暴露端口6001,但未成功。 我也尝试为应用程序定义虚拟主机,也没有成功

Socket.io服务器:

function handler(request, response) {
    response.writeHead(200);
    response.end('');
}

try {
    let app = require('http').createServer(handler);

    app.listen(process.env.SOCKET_PORT, function () {
        if (process.env.APP_DEBUG) {
            console.log(new Date, 'Server is running on port ' + process.env.SOCKET_PORT);
        }
    });

    try {
        let io = require('socket.io').listen(app, {log: false, origins: '*:*'});

        io.on('connection', function (socket) {
            if (process.env.APP_DEBUG) {
                console.log(new Date, 'Connected to Socket', socket.id);
            }
        });
....

Docker-compose文件:

services:
  app:
    container_name: seatbelt_node
    command: /bin/sh entrypoint.sh
    build:
      context: ./
      dockerfile: docker/node.docker
    volumes:
      - ./:/var/www
      - /var/www/node_modules
    ports:
      - "6001"
    networks:
      - seatbelt
  web:
    container_name: seatbelt_react
    build:
      context: ./
      dockerfile: docker/web.docker
    volumes:
      - ./:/var/www
    ports:
      - "80"
    links:
      - app
    environment:
      - "VIRTUAL_HOST=dock.seatbelt.local"
    networks:
      - nginx-proxy
      - seatbelt

连接到应用程序的功能:

let io = require('socket.io-client');

let host = window.location.host.split(':')[0];
let socket = io.connect('//' + host + ':' + process.env.SOCKET_PORT, {
    secure: false,
    rejectUnauthorized: false
});

socket.on('connect', function () {
    console.log(new Date, 'Connected to socket.');
....

我尝试完成的操作是通过某种方式从浏览器以某种方式访问​​到的脚本,该脚本位于ock.seatbelt.local(seatbelt_web容器)上 在端口6001上的seatbelt_node容器

0 个答案:

没有答案