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

在Docker Swarm模式(1.12+)中,可以创build所谓的“全局”服务,例如:

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

全局服务在每个节点上都是活动的。

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

Swarm是否保证 首先创build全局服务(直到其健康检查通过),并且只有在Swarm创build待处理的复制服务之后?

不,没有保证服务开始的顺序。 最佳做法是将您的应用程序/服务devise为对其他服务的失败具有弹性。 请记住,在您的应用程序生命周期中,服务可能随时中断(服务更新,networking可能暂时不可用,节点甚至数据中心可能停机)。

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