如何在多个 Docker 副本中 运行 仅安排一次代码?

How to run scheduled code only once in several Docker replicas?

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

我要实现的是:

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

我怎样才能做到这一点?

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

服务 1 将有应用 运行ning 副本=3

服务 2 只是 运行 具有副本 =1

的调度程序

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

如果应用程序还启动了一个调度程序,而你不能单独启动调度程序,那么上面的方法仍然有效,你只是不会向第二个服务发送任何连接,因为第一个服务正在做这项工作。