首页 > 解决方案 > Docker 撰写构建顺序

问题描述

我对 docker compose 和 build order 有疑问。下面是我的 dockerfile 用于启动我的 .net 应用程序

在此处输入图像描述

如您所见,作为构建过程的一部分,我使用“RUN dotnet test backend_test/backend_test.csproj”运行了一些测试

这些测试需要存在 mongodb 数据库。

我尝试使用 docker-compose 及其“depends_on”功能来解决这种依赖关系,见下文。

在此处输入图像描述

但是,这似乎不起作用,因为当我运行“docker-compose up”时,我得到以下信息:

在此处输入图像描述

由于不存在 mongodb,测试最终会超时。

depends_on 真的会影响构建顺序还是只影响启动顺序(即构建所有收益以正确顺序启动)?

还有另一种方法吗?(我希望测试作为构建最终应用程序的一部分运行)

Ty 提前,让我知道如果您需要额外的信息

标签: mongodbdockerasp.net-coredocker-compose

解决方案


如您所料,depends_on仅适用于运行时顺序,而不适用于构建时间 - 它只会影响docker-compose updocker-compose stop.

我强烈建议您使所有构建彼此独立。也许您需要在这里考虑单独的构建器和运行时映像,和/或使用基于 Docker 的 CI(Gitlab、Travis、Circle 等)来使这些依赖项可用于测试。

另请注意,depends_on这常常让人们失望——因为它只是等待Docker的启动完成,而不是应用程序启动。因此,当依赖于它的容器启动时,您的数据库/服务/任何可能仍在启动的东西将开始使用它,导致超时等。这就是现在存在的原因(在 Docker Compose 中HEALTH_CHECK具有类似的功能)healthcheck


推荐阅读