mongodb - Docker 撰写构建顺序

标签 mongodb docker asp.net-core docker-compose

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

enter image description here

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

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

我尝试使用 docker-compose 及其“depends_on”功能来解决此依赖性,请参见下文。

enter image description here

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

enter image description here

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

depends_on 实际上会影响构建顺序还是仅影响启动顺序(即构建以正确顺序启动的所有内容)?

还有其他方法可以做到这一点吗? (我希望测试作为构建最终应用程序的一部分运行)

如果您需要额外信息,请提前告诉我

最佳答案

正如您所猜测的,depends_on 仅适用于运行时顺序,而不适用于构建时间 - 它只是 affects docker-compose up and docker-compose stop .

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

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

关于mongodb - Docker 撰写构建顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60139255/

相关文章:

docker - 在pycharm中使用docker获取不支持的协议(protocol)方案错误

api - 具有 API key 和 JWT token 的 Net Core API

c# - HttpClient 不使用 .NET Core 在 Windows 上发送客户端证书

javascript - MongoDB查询结果聚合

mongodb - 如何在 Anaconda 中运行 MongoDB?

node.js - 如何使用 Passport 和 node.js 将当前登录状态添加到 MongoDB 中的用户架构

mongodb - 如何找到副本集名称?

environment-variables - 使用 Docker 的 12 要素配置方法

Docker Rails 应用程序和 git

c# - .NET Core 3.1 Identity 在 Azure 上登录需要很长时间