Docker compose - 构建顺序,数据库在应用程序之前

标签 docker docker-compose dockerfile

我正在使用 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/

相关文章:

docker - 通过 docker compose 链接到其他包含的 Docker 镜像的版本控制策略

docker - 如何在 docker 容器内从头开始构建新应用程序?

Docker - 将文件从主机上的外部位置复制到容器中

node.js - NodeJS 在 Docker 上安装

git - 我可以在 docker-compose 中使用我的 Windows 10 主机的 git 凭据吗?

node.js - Docker - 如何等待容器运行

docker-compose - 权限被拒绝 docker-entrypoint.sh

docker - 如何在 popper 工作流的 step 属性中正确引用 `dir`?

docker - 压缩/压平 Docker 镜像不会对注册表缓存产生不利影响吗?

python - Docker 容器正在运行。但页面在本地主机 URL 中不起作用(页面未发送任何数据)