docker swarm里面的service始终是new状态,起不来是什么原因?
1.ingress网络的ip用尽(默认生成的掩码为24,只有256可分配),无法为新的服务分配vip,可以重启stack,同时在另一个窗口使用journalctl -f -u docker | grep error抓取报错信息,如果有大量的vip报错则是这个原因;
解决:
解决方案
1.1 重启docker能够临时解决;
1.2 停止已启动的docker容器, 然后删除ingress网络:docker network rm ingress,重新生成ingress网络: docker network create --driver overlay --ingress --subnet=10.0.0.0/16 --gateway=10.0.0.1 --opt com.docker.network.mtu=1400 ingress
2.第二个原因,有可能是之前该stack重启某个节点没有将其服务释放干净,导致其network残留,从而新的服务
无法在该节点起来,这个就需要使用docker network inspect NETWORK_NAME做进一步排查。
swarm init 的小建议
docker swarm init --default-addr-pool 10.20.0.0/16 --advertise-addr 192.168.0.1 # 执行这个可以添加
docker swarm join-token manager # 获取加入manger的信息
docker swarm join --token SWMTKN-1-2nhuczkado840s2m