Docker Swarm部署应用需追加:4000访问VM IP的原因咨询
问题解答:Swarm集群访问端口异常的原因分析
没错,这个现象完全是由你docker-compose.yml里的ports: "4000:80"配置导致的,咱们来拆解一下背后的逻辑:
- 这个端口映射规则的含义很明确:把容器内部运行应用的80端口,映射到Swarm节点(也就是你的myvm1)的4000端口上。
- 当你直接用VM IP加80端口访问时,这个端口并没有被Swarm集群的服务监听——Swarm只在你指定的4000端口上接收外部流量,然后转发到容器内部的80端口,所以自然会出现连接拒绝的错误。
- 而当你追加
:4000后,流量正好命中了Swarm监听的端口,就能正常转发到应用,所以访问成功。
至于你提到的本地部署可以正常访问,大概率是两种情况之一:
- 你本地部署时修改了端口映射配置(比如改成了
80:80),直接把本地80端口和容器80端口绑定; - 或者本地部署时你是直接通过容器的内部IP访问80端口,绕过了主机端口映射的限制。
如果希望后续能通过VM IP的80端口直接访问应用,只需要修改docker-compose.yml里的ports配置为80:80,然后重新部署栈即可。不过要提前确认myvm1和myvm2的80端口没有被其他服务占用,避免端口冲突。
内容的提问来源于stack exchange,提问作者James B
相关产品推荐
相关产品推荐

