如何为同一项目中的不同构建指定不同的.dockerignore文件?

问题描述 投票:19回答:3

我曾经在tests中列出了.dockerignore目录,因此它不会包含在我用来运行Web服务的图像中。

现在我正在尝试使用Docker来运行我的单元测试,在这种情况下我想要包含tests目录。

我检查了docker build -h,发现没有选项相关。

我怎样才能做到这一点?

docker
3个回答
13
投票

目前,没有办法做到这一点。关于向Docker添加--ignore标志以提供要使用的忽略文件有一个冗长的讨论 - 请参阅here

你目前的选择大多是丑陋的:

  • 将您的项目拆分为子目录,每个子目录都有自己的Dockerfile.dockerignore,这可能不适用于您的情况。
  • 创建一个脚本,将相关文件复制到临时目录中并在那里运行Docker构建。

2
投票

将清理后的测试作为卷装入添加到容器中可以是一个选项。构建映像后,如果运行它进行测试,请在清理后的代码之上安装包含测试的源代码。

services:
   tests:
      image: my-clean-image
      volumes:
         - '../app:/opt/app' # Add removed tests

0
投票

另一个选择是进一步构建包含测试的构建过程。我这样做是这样的:

如果测试是单元测试,那么我创建一个从主项目图像派生的新Docker镜像;我只是在顶部贴上FROM,然后ADD测试,加上任何必需的工具(在我的情况下,mochachai等)。这个新的“测试”图像现在包含测试和要测试的原始源。然后它可以简单地按原样运行,也可以在“监视模式”下运行,其中卷映射到主机上的源和测试目录。

如果测试是集成测试 - 例如主映像可能是GraphQL服务器 - 那么我创建的映像是自包含的,即不是从主映像派生的(当然它仍然包含测试和工具) )。我的测试使用环境变量来告诉他们在哪里找到需要测试的端点,并且很容易让Docker Compose使用主映像调用容器,使用集成测试映像调用另一个容器,并设置环境变量这样测试套件就知道要测试什么。

© www.soinside.com 2019 - 2024. All rights reserved.