【发布时间】:2021-10-12 07:15:35
【问题描述】:
我有一个服务堆栈,我正在部署到我的 Docker 群,它有 1 个管理节点和 1 个工作节点。它的服务被限制为仅放置在这些节点之一(在本例中为管理器)。工作节点仅用作单独的入口点。
管理节点通过docker node update --label-add minecraft=main 设置标签minecraft=main
名为minecraft-net 的群范围覆盖网络由 docker-compose 堆栈单独创建。
管理器上的 docker-compose.yml(在主机模式下,不是 swarm)包含:
...
networks:
minecraft-net:
name: minecraft-net
driver: overlay
attachable: true
driver_opts:
encrypted: "true"
为了访问 Minecraft 服务器,玩家应该能够连接到工作节点主机名,并且路由网格应该将流量重定向到管理器。
为了部署这个堆栈,我使用
docker stack deploy --compose-file minecraft.yml minecraft
minecraft.yml 在哪里
version: '3.7'
services:
crafty-controller:
image: crafty-controller # This image is only available on the manager node
ports:
- "25500-25600"
- "13121:13121"
volumes:
- ./minecraft/docker/minecraft_servers:/minecraft_servers
- ./minecraft/docker/db:/crafty_db
- /mnt/minecraft-backups:/crafty_web/backups
networks:
- minecraft-net
deploy:
placement:
constraints:
- node.labels.minecraft == main
networks:
minecraft-net:
external: true
我过去曾为某个活动使用过类似的设置,但现在我遇到了问题。即使我能够使用管理器节点的地址直接连接到 Minecraft 服务器,工作程序节点也不会将任何流量重定向到管理器或从管理器返回。这意味着我无法通过工作节点地址连接到 Minecraft 服务器。
root@debvm:/opt/app/my.site# docker stack deploy --compose-file minecraft.yml minecraft
Updating service minecraft_crafty-controller (id: aug42i46efu9bc7wv39jflxdc)
image crafty-controller:latest could not be accessed on a registry to record
its digest. Each node will access crafty-controller:latest independently,
possibly leading to different nodes running different
versions of the image.
root@debvm:/opt/app/my.site# docker stack ls
NAME SERVICES ORCHESTRATOR
minecraft 1 Swarm
root@debvm:/opt/app/my.site# docker node ps
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
to2781e7jtjm minecraft_crafty-controller.1 crafty-controller:latest debvm Running Running about a minute ago
root@debvm:/opt/app/my.site# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
aug42i46efu9 minecraft_crafty-controller replicated 1/1 crafty-controller:latest *:13121->13121/tcp, *:30000-30076->25500-25576/tcp, *:30077->25600/tcp, *:30078-30099->25578-25599/tcp, *:30100->25577/tcp
root@debvm:/opt/app/my.site# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
6tnekpdbkktl8h7puqeba06i8 * debvm Ready Active Leader 19.03.15
qiedc8wfogv25ezlasmhe52co workernode Ready Active 19.03.15
我可以看到工作节点没有crafty-controller 图像来创建自己的服务实例。这是故意的,因为图像很大,无论如何应该只有一个实例。我想知道的是是否可以让工作节点通过入口覆盖网络将流量(请求)转发到管理节点,即使工作节点没有该堆栈所需的图像。
不知何故,我在一年前就能做到这一点,但我忘记了我是如何做到的。
目前,我无法通过工作节点的地址连接到 Minecraft 服务器(但可以使用管理节点的地址连接到它)。是否可以在我的配置中更改某些内容以允许玩家连接到工作节点并将流量重定向到管理节点?
【问题讨论】:
标签: docker minecraft docker-swarm