You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm集群中docker stack部署应用无法访问的相关问题

问题1:为何使用docker stack部署时,未在所有集群节点拉取完整镜像?

Docker Swarm是按需调度的,只会把容器需要的镜像拉到实际要运行该容器的节点,不会给所有节点都同步全量镜像。比如你的worker1只跑wordpress容器,它就只会拉取wordpress镜像,不会碰mysql;worker2只跑mysql容器,自然也不会拉取wordpress镜像。

至于部分节点上镜像TAG显示<none>,大概率是拉取过程中出了异常——比如网络波动、镜像仓库连接不稳定,导致镜像没有完整拉取完成,这种情况下容器基本处于异常状态。你可以试试在对应节点手动拉取指定镜像(比如docker pull wordpress:latest),或者重新部署stack触发镜像重拉。

问题2:为何docker stack部署的应用无法访问,但docker-compose部署可以正常访问?

这事儿核心是跨节点数据库连接配置+镜像异常的双重问题:

  • 用docker-compose部署时,wordpress和mysql容器都在本地节点的默认bridge网络里,wordpress官方镜像默认会用mysql这个服务名解析数据库地址,同一节点的bridge网络DNS解析正常,所以能顺利连接数据库,应用正常运行。
  • 但Swarm把两个容器调度到了不同节点(worker1和worker2),再加上你的stack.yml没明确指定WORDPRESS_DB_HOST环境变量(虽然默认值是mysql),同时worker节点的wordpress镜像拉取不完整(TAG为<none>)导致容器未正常启动并加入Swarm的overlay网络,最终出现getaddrinfo failed的DNS解析错误,连不上数据库,自然无法访问应用。

问题3:docker-compose是否会将容器部署到整个Swarm集群?

完全不会。docker-compose是单机容器编排工具,不管当前节点是不是Swarm集群的一员,它只会在你执行命令的本地节点创建、运行容器,根本不会调度到集群里的其他节点。只有docker stack这类Swarm专属的编排命令,才会基于集群调度策略把容器分发到各个节点。


内容的提问来源于stack exchange,提问作者v v

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:23:38