Клиент SocketIO в контейнере Docker - PullRequest
0 голосов
/ 24 января 2019

Клиент SocketIO, работающий в контейнере Docker, не подключается к серверу (не к Docker).

Без Docker клиент работает хорошо.Но из Docker клиент не может подключиться к серверу.Если вы запускаете клиентские контейнеры в режиме Host-network на той же машине, что и сервер, и подключаетесь по адресу 0.0.0.0, соединение будет работать.Но это работает только тогда, когда все в одном экземпляре, и мне нужно другое решение.Я попробовал некоторые манипуляции с выставлением портов, но это не помогло.

Код сервера:

const http = require("http");
const express = require("express");
const socketIO = require("socket.io");
const app = express();
const server = http.Server(app);
const io = socketIO(server);
io.on("connection", function(socket) {
    console.log("Wow! Client socket connected!");
});
server.listen(8081, "0.0.0.0", function() {
    console.log("Starting server on port 8081");
});

Код клиента, который должен работать в Docker:

let serverAddress = "address-of-the-server:8081";
const socketIOClient = require("socket.io-client");
const socket = socketIOClient(serverAddress);

Чтоя делаю неправильно, почему клиент не может подключиться к серверу?Нужны ли контейнеру специальные порты?

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Вы, должно быть, уже кое-что выяснили, но для любого другого, кто приземлится здесь ... Я столкнулся с той же проблемой, хотя у меня были перья с обеих сторон (перья-vuex).Как и ваша установка, клиентская и серверная части находятся в отдельных докерах, и они прекрасно взаимодействуют, пока я запускаю браузер в той же системе, в которой работает докер, с браузером, указывающим на localhost.Но я не мог просматривать из другой системы.Я долго бился головой об стену, пытаясь выяснить, как передать переменную окружения или что-то от хоста клиенту в БРАУЗЕРЕ во время выполнения, и ничего, что я нашел в Интернете, не получалось.Наконец, я понял, с большой ладонью, что пользователь набрал IP-адрес хост-системы в адресной строке браузера!Я могу просто извлечь его из location.href!В моем случае мы используем IP-адреса, но, думаю, что-то подобное будет работать, если вы используете URL-адреса.Надеюсь, это кому-нибудь поможет.

0 голосов
/ 24 января 2019

Проблема в address-of-the-server Я думаю. Чтобы быть уверенным, запустите свой контейнер так:

docker run ... --network=host <image_name>

И используйте localhost вместо address-of-the-server.

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