如何在传播IP地址时避免Docker中多余的容器链接?

假设我有一台运行Docker的服务器。 为了创build一个简单的负载平衡系统,我在一个独立的容器中运行了一个应用程序的两个实例。 它们都与驻留在单独容器中的数据库通信。 为了访问数据库,我需要使其IP地址(每当我杀死容器,因为我重build它的IP地址),通过容器连接可用。 链接通过环境variables提供数据库的IP。

总共有三个容器。 其中两个需要知道第三个(通过环境variables)的IP地址,但我必须创build两个容器链接,并为同一个IP地址命名两个链接。

$ docker run -d --name dbcontainer company/database:1.1 $ docker run -d --name appinstance0 company/app:2.1 --link dbcontainer:dblink0 $ docker run -d --name appinstance1 company/app:2.1 --link dbcontainer:dblink1 

appinstance0现在可以使用DBLINK0_PORT_1234_TCP_ADDRappinstance1可以使用DBLINK1_PORT_1234_TCP_ADDR知道数据库容器的IP地址。

这两个variables都包含完全相同的信息。 所以,如果我决定添加另一个实例,我将不得不创build一个dblink2等…这是远离实际。 有没有不同的方法来引用一个容器的IP地址? 我想只有一个variables,其中包含数据库容器的IP地址。

有没有不同的方法来引用一个容器的IP地址?

是的, docker链接也定义主机名 。 因此,您可以select不使用环境variables来获取数据库IP地址。

您可以按如下方式启动您的容器:

 $ docker run -d --name dbcontainer company/database:1.1 $ docker run -d --name appinstance0 company/app:2.1 --link dbcontainer:dblink $ docker run -d --name appinstance1 company/app:2.1 --link dbcontainer:dblink 

只要您的应用程序configuration文件将mysql主机设置为dblink

还有其他的方式来发现你的数据库的IP地址,但没有docker,所以你将不得不学习如何使用另一个工具的任务。 如果您想了解更多信息,请search“服务发现和泊坞窗”。