我曾经在.dockerignore
中列出tests
目录,以便它不会包含在我用来运行Web服务的映像中。如何在同一个项目中为不同的构建指定不同的.dockerignore文件?
现在我正在尝试使用Docker来运行我的单元测试,在这种情况下,我想要包含tests
目录。
我查过docker build -h
,发现没有相关的选项。
我该怎么做?
我曾经在.dockerignore
中列出tests
目录,以便它不会包含在我用来运行Web服务的映像中。如何在同一个项目中为不同的构建指定不同的.dockerignore文件?
现在我正在尝试使用Docker来运行我的单元测试,在这种情况下,我想要包含tests
目录。
我查过docker build -h
,发现没有相关的选项。
我该怎么做?
目前没有办法做到这一点。有关于向Docker添加--ignore
标志以提供忽略文件以供使用的冗长讨论 - 请参阅here。
你此刻的选项大多是丑陋:
Dockerfile
和.dockerignore
,这可能会在你的情况下无法正常工作。另一种选择是进一步构建包含测试的过程。我这样做的方式是:
如果测试是单元测试然后我创建一个新的Docker图像,从主项目图像派生;我只是坚持顶部FROM
,然后ADD
测试,再加上任何所需的工具(在我的情况下,mocha
,chai
等)。这个新的“测试”图像现在包含这两个测试和要测试的原始来源。它可以直接运行,也可以在“监视模式”下运行,并将卷映射到主机上的源和测试目录。
如果测试集成测试 ----例如初级图像可能是GraphQL服务器 - 然后我创造的形象是自包含的,即不是从初级图像导出(它仍然包含了测试和工具,当然)。我的测试使用环境变量来告诉他们在哪里找到需要测试的端点,并且很容易让Docker Compose调用这两个一个容器使用主映像,另一个容器使用集成测试映像,并设置环境变量,以便测试套件知道要测试什么。
将已清理的测试作为卷装入添加到容器可能是此处的一个选项。在生成映像之后,如果运行它进行测试,请将包含测试的源代码安装在清理后的代码上。
services:
tests:
image: my-clean-image
volumes:
- '../app:/opt/app' # Add removed tests
使用不同的基础目录? – Henry