Docker群集模式 – 工作节点上没有发布的端口

我正在尝试在一些VirtualBoxes上的docker温暖模式。 我用经理创build了这个群体

docker swarm init --advertise-addr 192.168.15.4 --listen-addr 192.168.15.4 

join一个工作节点完美地工作。 所以我有一个pipe理器节点和一个工作节点。 然后我使用发布的端口部署两个服务(一个发布端口为3306,另一个发布端口3000为node.js应用程序)。

 docker service create --name mysqlbox --publish 3306:3306 mysqlimage docker service create --name nodebox --publish 3000:3000 nodeimage 

现在的问题是,在pipe理器节点上运行的服务暴露其端口正确,所以我可以通过curl docker-manager:3306 docker curl docker-manager:3306连接到它,但在worker节点上运行的服务不会将其端口(3000)暴露给主机,所以我不能连接到curl docker-worker:3000 。 我还读到,如果端口发布,它应该在所有节点上可用,但这是行不通的。 用netstat检查一切。 在pipe理器节点上,端口(3306)是可见的,但是在任何其他节点上没有端口3000。 如果manager节点和mysql服务上的node.js服务在worker节点上运行,则会发生同样的情况。 然后,node.js服务的端口发布在manager节点上,我无法连接到worker节点上的mysql服务。

有人能给我一个提示吗?

您可以尝试使用覆盖networking来允许访问工作节点。

[Overlay] https://docs.docker.com/engine/swarm/networking/#create-an-overlay-network