请原谅模糊的问题标题,我是一个完全的初学者,我缺乏更具体地提出我的问题的术语。
我一直在开发一个简单的应用程序,它由一个游戏服务器(使用 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 地址并连接到它。然而,容器命名解析不起作用;我需要那个
如果我尝试定义共享网络,如下所示:
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内部的IP地址基本上没什么用。特别是,在您的场景中,永远无法从另一台计算机访问它们。没有理由去查找它们,或者直接指定它们。
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“所有接口”地址。
两个端口号匹配很常见,但绝对不是必需的。