假设我正在使用一组 CLI docker run 命令来创建容器、网络(在我的例子中为桥接类型)的整个环境并将容器连接到特定网络。
直到我只想在一台机器上拥有一个这样的环境之前,一切都运行良好。
但是,如果我想在同一台机器上拥有与我刚刚创建的环境相似的环境,但出于不同的目的(测试),我会遇到名称冲突问题,因为我无法创建和启动容器和网络同名。
到目前为止,我尝试以与第一个环境相同的方式启动第二个环境,但为所有容器和网络名称添加前缀。
这行得通,但有一个缺陷:在运行对 URI 的所有请求的应用程序中,由于它们有一个结构,所以它们被破坏了
<scheme>://<container-name>:<port-number>
并且应用程序无法访问<prefix-container-name>
。
我想要实现的是在与我可以用来执行应用程序测试等的第二个环境相同的机器上运行第一个环境的精确副本。
- 在 Docker 中是否有命名空间的概念或类似的概念?
我可以在所有用于创建环境的 docker run etc 命令之前使用的命令,并且只有两个 bash 脚本,它们仅在开头的命名空间命令不同? - 可以使用虚拟机,即 Oracle Virtualbox 来解决我的问题吗?为第二个环境创建虚拟机?这不是矫枉过正吗,会增加额外的麻烦吗?
- 也许有一种
--hostname
fordocker run
命令允许使用此名称从其他容器访问容器?Unlucky--hostname
只能通过这个名称从容器本身访问容器,而不是从任何其他容器。也许有一个选项或命令可以创建别名、虚拟主机或任何我可以放入应用程序 URI 的神奇通用名称,<scheme>://<magic-name>:<port-number>
因此只要magic-name
在环境网络中可用,创建具有不同容器和网络名称的第二个环境就不会出现问题 - 我需要环境的精确副本是因为我想运行测试并检查它们是否也在依赖级别上失败,我认为这是来自持续集成过程的非常简单的场景。对于我想要实现的目标,是否有任何专门的开源解决方案?我不使用 docker composer,而是使用带有所有 docker cli 命令的 bash 脚本来启动和运行整个环境。
感谢您的帮助。