首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker build找不到docker来运行测试

Docker build找不到docker来运行测试
EN

Stack Overflow用户
提问于 2020-06-02 00:50:16
回答 2查看 365关注 0票数 0

我有一个使用ioredis连接到redis并发布数据和其他内容的NodeJS应用程序。

我正在尝试编写一个针对redis的组件测试,并且能够通过jest创建一个setup/teardown脚本,该脚本通过docker在随机端口上运行redis,并在通过docker run -d -p 6379 --rm redisdocker stop {containerId}完成测试时将其销毁。

这在本地运行得很好,但我们在Dockerfile中的多阶段构建中运行了测试:RUN yarn test

我试着通过docker build .构建它,它运行得很好,直到它到达测试阶段,然后抱怨下面的错误- /bin/sh: docker: not found

因此,Docker不能用于docker-build过程来运行测试?

有没有办法运行docker-build,让它能够在进程中启动同级进程?

EN

回答 2

Stack Overflow用户

发布于 2020-06-02 01:03:30

在我看来,这就像是一种“对接”的情况。

你不能启动同级,但是你可以通过一些技巧在容器中产生一个容器:(你可能需要做一些googling才能得到正确的结果)

将docker二进制文件安装在"host container"

  • mount
  • “容器内的实际主机中,如docker run -v /var/run/docker.sock:/var/run/docker.sock ...

所示

但是您不能在构建步骤中做到这一点,因此对于您的情况来说,这并不容易。

我建议您准备一个能够运行嵌套容器的专用构建容器,它将基本上模拟您的本地环境并在您的CI中使用它。不过,您可能需要对流程进行一点重构,使其正常工作。

祝你好运:)

票数 1
EN

Stack Overflow用户

发布于 2020-06-02 03:31:52

在我的实践中,测试不应该关注初始化数据库,它们应该只关注如何连接到数据库,所以您只需通过环境变量传递数据库连接数据即可。

你这样做的方式它不会扩展,想象一下你的应用程序需要更多的服务,通过测试启动它们将是困难和不切实际的。

当您在本地进行开发时,您有责任在进行测试之前让服务运行。

您可以在存储库中使用docker编写脚本,这些脚本可以在您开始开发时创建和启动所需的所有服务。

当您在云中使用CI时,您仍然会使用docker容器并在其中运行测试(包含测试的节点容器、redis容器、mysql容器等)。同样,只需通过环境变量传递适当的连接数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62136981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档