Docker撰写 - 在应用程序之前构建订单,数据库

时间:2016-11-21 23:03:55

标签: docker docker-compose dockerfile

我使用docker compose文件构建了一个Web应用程序。在一个图像中,我有webserver,php和其他必需的扩展和包。 Web应用程序的Docker文件继承公共基础映像并使用自定义命令扩展它。在另一个容器中我有mysql服务器。现在我面临的问题是,在初始构建期间,我的应用程序实际上需要实时数据库连接,但Web容器始终首先执行,而数据库1仍未启动,这当然会导致失败。我试图添加depends_on但是我认为这只影响开始顺序,而不是构建顺序。

我听说摇滚乐和其他扩展解决了这个问题,但有没有办法本地做到这一点?据我所知,我发现没有可行的选择,因为人们要求它很多没有意义。

2 个答案:

答案 0 :(得分:2)

我不确定它是否适合您,但您可以构建自定义脚本。

让我们说你有两个泊坞文撰写文件。

  • 一个用于构建mysql数据库的文件
  • 第二个适用于您的webapps

首先你可以用两个mysql图像午餐mysql数据库docker-compose文件

  • 一个人将在您的数据库中共进午餐
  • 第二个将启动脚本,直到mysql db准备就绪。

在两个容器完成启动后,您可以开始使用您的webapps启动docker-compose,您将确保数据库已启动并正在运行

这种方法需要一些自定义脚本来处理,但可能非常有用。

答案 1 :(得分:2)

在docker文件之后,depends_on将不会等待db在启动web之前“准备好”。如果您需要等待服务准备就绪,请按照此处的文档操作 https://docs.docker.com/compose/startup-order/