Как подключиться из браузера к серверу socket.io, работающему в другом контейнере - PullRequest
0 голосов
/ 10 января 2019

У меня есть настройка докера с 2 контейнерами, 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.');
....

То, что я пытаюсь выполнить, каким-то образом из браузера, когда я нахожусь на dock.seatbelt.local (контейнер seatbelt_web) сценарий, чтобы можно было достичь Контейнер привязного ремня на порту 6001

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...