docker - 如何防止 Docker 容器在同一服务中的另一个容器尝试打开时打开?

标签 docker dockerfile docker-swarm

我想防止多个容器一起打开。 即假设我有一项服务,并且我想打开它的 5 个副本。

那么他们应该这样做:

容器 1 启动 ==> 容器 1 运行且健康 ==> 容器 2 启动 ==> 容器 2 运行且健康 ==> 容器 3 启动 ==> 容器 3 运行且健康 ==> 容器 4 启动 == > 容器 4 运行且健康 ==> 容器 5 启动 ==> 容器 5 运行且健康。

我检查了 HEALTHCHECK,但我不知道它在这种情况下是否对我有帮助

谢谢

最佳答案

您可以添加另一个应用程序容器来充当协调器。

与此有很大关系question .

我的想法是拥有一个共享的 Redis,其中有一个共享锁。因此,每个新容器开始查询共享 Redis 中的锁,当获取锁时,容器完成启动,然后释放锁。

https://redis.io/topics/distlock

Distributed locks are a very useful primitive in many environments where different processes must operate with shared resources in a mutually exclusive way.

关于docker - 如何防止 Docker 容器在同一服务中的另一个容器尝试打开时打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44047346/

相关文章:

php - Docker 安装 memcached

docker - 创建前检查错误:激活Hyper-V时, "This computer is running Hyper-V. VirtualBox won' t引导64位VM

docker - 如何在 docker-compose.yml 中的命令中使用 `echo` 来处理冒号 (":") 符号?

java - 在 docker 镜像中部署 WAR 文件的正确方法

PHP7.2.7-fpm/Docker ini_set() : Headers already sent. 此时无法更改session模块的ini设置

django - 使用 pycharm 调试器调试在 docker 镜像中运行的 django 应用程序

docker - Docker Swarm上的Hadoop集群-数据节点无法连接到Namenode

docker - Docker Swarm - 网络沙箱加入失败 : subnet sandbox join failed for "10.0.0.0/24": error creating vxlan interface: file exists

docker 服务创建永不返回

nginx - Mac 主机上 Docker-machine 的容器联系应用