@Davidaa_WoW

Почему не подключается socket.io в докер контейнерах?

Есть приложение чата (mysql, nodejs, socket.io, apache), запускал на сервере - всё работало. Потребовалось перенести в докер. С клиента к серверу не хочет подключаться.
Конфигурация docker-compose.yml
version: "3.8"
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 1
      MYSQL_DATABASE: chattest
    volumes:
      - ./DB:/docker-entrypoint-initdb.d
    networks:
      - app-network
  server:
    image: node
    volumes:
      - ./server:/server
    command: "node /server/server.js"
    ports:
      - 8010:8010
    depends_on:
      - db
    networks:
      - app-network
  client:
    image: php:8.2
    volumes:
      - ./public:/var/www/html
    ports:
      - 8001:80
    networks:
      - app-network
    depends_on:
      - server
    command: php -S 0.0.0.0:80 -t /var/www/html
networks:
  app-network:
    driver: bridge


Сервер:
const path = require("path");
const express = require("express");
const http = require("http");
const mysql = require("mysql2");

const pool = mysql.createPool({
  host: "db",
  user: "root",
  database: "chattest",
  password: "1",
});

const app = express();
const server = http.createServer(app);
app.use(express.static(path.join(__dirname, "public")));

const io = require("socket.io")(server, {
  cors: {
    origin: "client:8001",
  },
});

io.sockets.on("connection", (socket) => {
  console.log("Успешное соединение");
  });
const PORT = 8010 || process.env.PORT;

server.listen(PORT, () => console.log("Server running on port " + PORT));


Подключение с клиента:
import { io } from "https://cdn.socket.io/4.4.1/socket.io.esm.min.js";
const URL = "server:8010";
      socket = io(URL);


Изнутри контейнера клиента, контейнер сервер пингуется, в том числе netstat-ом 8010 порт.
Но в самом приложении в консоль браузера выводится ошибка:
polling-xhr.js:157 
       GET http://server:8010/socket.io/?EIO=4&transport=polling&t=Oo3-Z5F net::ERR_NAME_NOT_RESOLVED

При этом, объект socket в консоль тоже выводится, но ничего внятного об ошибках там нет.
В чём может быть проблема?
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
Изнутри контейнера клиента, контейнер сервер пингуется

Вот только браузер не в контейнере.

http://server:8010
И откуда вашему браузеру знать что это за server? Добавьте в hosts файл запись для начала или localhost используйте.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы