我正在使用 docker compose 文件来构建一个 Web 应用程序。在一张图片中,我有网络服务器、php 和其他所需的扩展和包。 Web 应用程序的 Docker 文件继承公共(public)基础镜像并使用自定义命令扩展它。在另一个容器中我有 mysql 服务器。现在我面临的问题是,在初始构建过程中,我的应用程序实际上需要实时数据库连接,但始终首先执行 Web 容器,而数据库仍未启动,这当然会导致失败。我尝试添加depends_on,但据我所知这只会影响启动顺序,而不影响构建顺序。
我听说摇杆和其他扩展可以解决这个问题,但是有没有办法在本地做到这一点?据我研究,我发现没有可行的选择,因为人们要求很多,所以没有意义。
最佳答案
我不确定这是否适合您,但您可以构建自定义脚本。
假设您有两个 docker-compose 文件。
- 用于构建 mysql 数据库的一个
- 第二个用于您的网络应用
首先你可以使用两个 mysql 镜像来启动 mysql 数据库 docker-compose 文件
- 其中一个将为您的数据库提供午餐
- 第二个将启动脚本,直到 mysql 数据库准备就绪。
两个容器完成启动后,您可以开始使用您的 web 应用程序启动 docker-compose,并且您将确保数据库已启动并运行。
此方法需要一些自定义脚本来处理,但非常有帮助。
关于Docker compose - 构建顺序,数据库在应用程序之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40731013/