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