如何在几个Docker副本中只运行一次预定代码?

时间:2018-06-05 20:22:48

标签: javascript docker concurrency docker-swarm

我在Docker中有一个容器。它有三个副本。我还有一个调度程序(库),它每分钟运行一次并在我的代码中调用一个函数。由于我有两个副本,它会调用三次:(

我想要实现的目标是:

当调度程序调用代码时,第一个副本应该执行该任务,另外两个应该检测到该任务并跳过执行该任务。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

你应该把这两个分解为他们自己的服务。

服务1将使应用程序运行replicas = 3

服务2只运行replicas = 1

的调度程序

例如,如果您在Laravel中,则可以将所有代码放在一个映像中,只需将服务命令更改为在调度程序服务中运行即可。

如果应用程序也启动了一个调度程序并且您不能单独启动调度程序,那么上面的代码仍可正常工作,您将不会发送任何连接到第二个服务,因为第一个服务正在执行那工作。