使用 socket.io Dockerise 客户端/服务器设置

问题描述 投票:0回答:1

请原谅模糊的问题标题,我是一个完全的初学者,我缺乏更具体地提出我的问题的术语。

我一直在开发一个简单的应用程序,它由一个游戏服务器(使用 socket.io,即 WebSockets)和一个游戏客户端(它只是一个 HTTP 服务器)组成。我已经完成了本地开发,现在想将其托管在我的学生组织的服务器上;鉴于该机器已经安装了 Docker,我认为这将是最简单的解决方案。

具体来说,在本地开发中,我将 WebSockets 服务器设置为使用端口 3141,将 HTTP 服务器设置为使用端口 5173。我尝试使用

docker compose
并提出了以下配置:

services:
  server:
    build: .
    ports:
      - 3141
  frontend:
    build: ./kwispel-client
    ports:
      - 5173

使用

docker inspect kwispel-server-server-1
然后我可以手动找出 HTTP 服务器的 IP 地址并连接到它。然而,容器命名解析不起作用;我需要那个

  • 告诉socket.io客户端连接到哪里,并传入http://server:3141是行不通的;
  • 告诉 socket.io 的服务器端允许使用哪些 CORS 标头,并传入 http://frontend:5173 不起作用。在本地,该项目使用 localhost 而不是服务器或前端可以正常工作。

如果我尝试定义共享网络,如下所示:

services:
  server:
    build: .
    ports:
      - 3141
    networks:
      kwispel-server_gedeeldNetwerk:
        ipv4_address: 172.16.238.10  
  frontend:
    build: ./kwispel-client
    ports:
      - 5173
    networks:
      kwispel-server_gedeeldNetwerk:
        ipv4_address: 172.16.238.20
networks:
  kwispel-server_gedeeldNetwerk:
    driver: bridge
    ipam:
      config:
        - subnet: "172.16.238.0/24"

这样我就可以拥有固定的 IP 地址,我什至无法连接到该地址上的 HTTP 服务器。

我遗漏了一些明显的东西吗?我是否需要向 docker-compose up 传递一个额外的标志来公开我需要的端口?我完全不知所措。非常感谢任何正确方向的指点。

docker docker-compose socket.io
1个回答
0
投票

Docker内部的IP地址基本上没什么用。特别是,在您的场景中,永远无法从另一台计算机访问它们。没有理由去查找它们,或者直接指定它们。

在您的 Compose

ports:
中,您仅指定了一个端口号。这使得给定的容器端口可以从主机系统和其他地方访问,但 Docker 选择端口号。您可以使用
docker-compose port

找出 Docker 选择的端口号
$ docker-compose port frontend 5173
0.0.0.0:32769
$ curl http://localhost:32769

如果您直接在本机 Linux 主机上使用 Docker 引擎,则也可以从远程系统使用该端口号。

通常在 ports: 中指定

two
端口号。这样你就可以选择主机端口了。

services:
  frontend:
    ports:
      - '8080:5173'
curl http://localhost:8080

需要注意的是,第一个端口号必须与任何其他容器或主机进程的已发布端口不同;第二个端口号必须与容器内进程运行的端口相匹配;并且该进程还必须侦听特殊的 0.0.0.0“所有接口”地址。

两个端口号匹配很常见,但绝对不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.