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

时间:2015-04-11 17:42:36

标签: docker

上下文

  

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

     

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

     

不幸的是,在我的情况下,系统初始化步骤会产生一些   特定于应用程序的配置文件,指向当前的IP   容器的地址。通过后续执行测试套件   docker run命令将失败,因为测试套件会看到一个   容器的IP地址不同于容器中包含的IP地址   应用程序配置文件(容器的IP地址是   每次重启都碰到了。)

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

1 个答案:

答案 0 :(得分:1)

我猜你不能在重启容器时覆盖重新定义的IP地址。我们有一个类似的麻烦:我们的dockerized应用程序有配置文件,其中IP名称是硬编码的,所以我们在每次重启后都会有很多痛苦。这是某种服务发现问题。

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

但在我看来,您的解决方案的架构不符合Docker原则。所有不可变对象(二进制文件,配置等)都应该组合在Docker镜像中。任何额外的初始化都应该在ENTRYPOINT时执行(例如在运行时开始时)。如果这对你来说太贵了,你也可以将初始化放在图像中,但是你必须在运行时破解它们。

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