上下文
我想并行执行大量测试套件。至 确保给定测试套件的结果不会受到影响 以前的测试套件的副作用,我想要每个测试套件 在一个干净的,新初始化的环境中运行。
环境的初始化太昂贵而无法重复 每个测试套件之间。因此,我正在考虑创建一个Docker 包含初始化系统的图像并运行每个测试套件 在一个新的Docker容器中,从该图像开始。自从 测试套件数量巨大,我想运行多个容器 (即测试套件)在同一主机上,并行。
不幸的是,在我的情况下,系统初始化步骤会产生一些 特定于应用程序的配置文件,指向当前的IP 容器的地址。通过后续执行测试套件
docker run
命令将失败,因为测试套件会看到一个 容器的IP地址不同于容器中包含的IP地址 应用程序配置文件(容器的IP地址是 每次重启都碰到了。)
答案 0 :(得分:1)
我猜你不能在重启容器时覆盖重新定义的IP地址。我们有一个类似的麻烦:我们的dockerized应用程序有配置文件,其中IP名称是硬编码的,所以我们在每次重启后都会有很多痛苦。这是某种服务发现问题。
作为一个快速解决方案,您可以使用简单的重新配置脚本来更新配置中的IP地址,并在每次测试会话之前运行它。
但在我看来,您的解决方案的架构不符合Docker原则。所有不可变对象(二进制文件,配置等)都应该组合在Docker镜像中。任何额外的初始化都应该在ENTRYPOINT
时执行(例如在运行时开始时)。如果这对你来说太贵了,你也可以将初始化放在图像中,但是你必须在运行时破解它们。
据我所知,没有办法使docker容器的IP对应于正在构建映像的容器的IP。