有什么工具可以管理Docker个容器按顺序启动?
What tool can manage Docker container to start in order?
我们正在尝试将我们的系统移植到容器中,目前我们尝试使用 Puppet Docker 模块,但我们遇到了启动某些特定容器的顺序问题。
我们有一个 Web 应用程序 MySQL、NginX,然后所有内容都通过 HAproxy 连接。他们每个人都住在自己的容器里。
我们先启动一些容器,例如 MySQL 容器必须在 HAproxy 之前准备好。但是 HAProxy 的启动速度比 MySQL 快。 HAProxy 检查设置的 TCP 连接。因为 MySQL 还没有准备好,我们的应用程序守护进程不能 start.Outside,我们真的不知道怎么回事,因为 HAProxy 是 运行,过一会儿剩下的服务 运行也。 (我们也不能依赖pidfile,因为它是在没有完全启动的阶段创建的。)
对于这种情况,我们可以使用什么工具?
或者,更好的方法是什么?
最简单的方法是简单地向您的容器添加重试策略,并确保如果它在启动时无法访问所需的资源,它将退出:
docker run -d mysql
docker run -d --restart always --link mysql:mysql nginx start_or_die.sh
此处的 start_or_die.sh
脚本将首先 ping mysql 进行健康检查,然后启动 nginx:
#!/usr/bin/env bash
set -e
mysql -u root -e 'use mydbname'
nginx -g 'daemon off;'
我们正在尝试将我们的系统移植到容器中,目前我们尝试使用 Puppet Docker 模块,但我们遇到了启动某些特定容器的顺序问题。
我们有一个 Web 应用程序 MySQL、NginX,然后所有内容都通过 HAproxy 连接。他们每个人都住在自己的容器里。
我们先启动一些容器,例如 MySQL 容器必须在 HAproxy 之前准备好。但是 HAProxy 的启动速度比 MySQL 快。 HAProxy 检查设置的 TCP 连接。因为 MySQL 还没有准备好,我们的应用程序守护进程不能 start.Outside,我们真的不知道怎么回事,因为 HAProxy 是 运行,过一会儿剩下的服务 运行也。 (我们也不能依赖pidfile,因为它是在没有完全启动的阶段创建的。)
对于这种情况,我们可以使用什么工具?
或者,更好的方法是什么?
最简单的方法是简单地向您的容器添加重试策略,并确保如果它在启动时无法访问所需的资源,它将退出:
docker run -d mysql
docker run -d --restart always --link mysql:mysql nginx start_or_die.sh
此处的 start_or_die.sh
脚本将首先 ping mysql 进行健康检查,然后启动 nginx:
#!/usr/bin/env bash
set -e
mysql -u root -e 'use mydbname'
nginx -g 'daemon off;'