如何在一台主机上运行Docker容器池,并在重启时保留其IP地址?

如何在一台主机上运行Docker容器池,并在重启时保留其IP地址?,docker,Docker,上下文 我想并行执行大量的测试套件。到 确保给定测试套件的结果不会受到 以前的测试套件的副作用,我希望每个测试套件 在干净、新初始化的环境中运行 环境的初始化代价太高,无法重复 在每个测试套件之间。因此,我想创建一个Docker 包含初始化系统的映像,用于运行每个测试套件 在一个新的Docker容器中,从该图像开始。自从 测试套件的数量很大,我想运行多个容器 (即测试套件)在同一主机上并行运行 不幸的是,在我的例子中,系统初始化步骤会产生一些错误 引用当前IP的特定于应用程序的配置文件 集装箱的

上下文

我想并行执行大量的测试套件。到 确保给定测试套件的结果不会受到 以前的测试套件的副作用,我希望每个测试套件 在干净、新初始化的环境中运行

环境的初始化代价太高,无法重复 在每个测试套件之间。因此,我想创建一个Docker 包含初始化系统的映像,用于运行每个测试套件 在一个新的Docker容器中,从该图像开始。自从 测试套件的数量很大,我想运行多个容器 (即测试套件)在同一主机上并行运行

不幸的是,在我的例子中,系统初始化步骤会产生一些错误 引用当前IP的特定于应用程序的配置文件 集装箱的地址。通过后续测试执行测试套件
docker run
命令将失败,因为测试套件将看到 容器的IP地址与中包含的IP地址不同 应用程序配置文件(容器的IP地址为 每次重启时都会发生颠簸)

  • 如何在单个主机上以编程方式运行多个Docker容器,确保每个容器在重新启动时保留自己的IP地址
  • 当并行运行时,多个容器是否可以共享“相同”的IP地址,以便我只能初始化系统一次

我猜您无法在重新启动容器时覆盖IP地址的重新定义。我们也有一个类似的问题:我们的停靠应用程序配置了硬编码的ip名称,所以每次重启后我们都会有很多痛苦。这是某种服务发现问题

作为一个快速解决方案,您可以将更新配置中IP地址的简单重新配置脚本放在每个测试会话之前运行它

但在我看来,您的解决方案的体系结构不符合Docker原则。所有不可变对象(二进制文件、配置等)都应合并到Docker映像中。任何额外的初始化都应在
入口点
时执行(例如在运行时开始时)。如果这对您来说太昂贵,您也可以将初始化放在映像中,但您必须在运行时对其进行破解

据我所知,没有办法使docker容器的IP与正在构建映像的容器的IP相对应