mongodb - 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 提前,让我知道如果您需要额外的信息
解决方案
如您所料,depends_on
仅适用于运行时顺序,而不适用于构建时间 - 它只会影响docker-compose up
和docker-compose stop
.
我强烈建议您使所有构建彼此独立。也许您需要在这里考虑单独的构建器和运行时映像,和/或使用基于 Docker 的 CI(Gitlab、Travis、Circle 等)来使这些依赖项可用于测试。
另请注意,depends_on
这常常让人们失望——因为它只是等待Docker的启动完成,而不是应用程序启动。因此,当依赖于它的容器启动时,您的数据库/服务/任何可能仍在启动的东西将开始使用它,导致超时等。这就是现在存在的原因(在 Docker Compose 中HEALTH_CHECK
具有类似的功能)healthcheck
推荐阅读
- maven - 连接超时:在 Maven 中从 Nexus 下载时连接错误
- python - WebDriverException:消息:TypeError:无法访问死对象
- mysql - 返回表MYSQL的过程或函数
- html - CSS - 优化同一项目的恒定屏幕尺寸变化以提高性能
- linux - 每日 grep 和输出状态
- php - 从数据库中选择带有信息的选项
- asp.net - 使用 Azure 上的现有数据库部署 ASP MVC 应用程序
- angularjs - 无法在数字“1”上创建属性“路线”
- python - 如何使用模糊逻辑从熊猫数据框中匹配和提取文本?
- java - 有什么方法可以在使用 selenium 的 Web 自动化测试中获取请求正文?