Docker 全局服务总是首先在新的 Swarm 节点上创建吗?

Is Docker global service always created first on new Swarm node?

在 Docker Swarm Mode (1.12+) 中可以创建所谓的 'global' 服务,例如:

docker service create \
 --name redis_2 \
 --mode global \
 redis:3.0.6

全局服务在每个节点上都处于活动状态。

当我向 Swarm 添加新节点时以及当 Swarm 有一些待创建的服务要创建时,服务创建的顺序是什么?

Swarm 保证 创建全局服务首先(直到它的健康检查通过),并且只有在那之后 Swarm 创建挂起的复制服务?

不,无法保证服务的启动顺序。最佳实践是将您的应用程序/服务设计为能够抵抗其他服务的故障。请记住,在您的应用程序的生命周期中,服务可能随时中断(服务更新、网络可能暂时不可用、节点甚至数据中心可能关闭)。

如果一个服务依赖于另一个服务,你可以(例如)实现一个重试循环;一个简单的例子可以在 WordPress 官方图片中找到,它有一个重试循环来检查数据库服务器是否可用,并接受连接; https://github.com/docker-library/wordpress/blob/637afb53dc03b4af19149a0880e796346f97c137/php5.6/apache/docker-entrypoint.sh#L170-L181