2017-02-17 134 views
1

我有一个名为“web”和“db”的2个服务(容器)的撰写文件。Docker撰写和主机名

{ 
    "version": "2", 
    "services": { 
     "web": { 
      "image": "nodejs:latest", 
      "ports": ["80"] 
     }, 
     "db": { 
      "image": "mysql:latest", 
      "ports": ["3306"] 
     } 
    } 
}  

我能够通过使用“db”作为我的数据库的IP从Web容器访问数据库容器。如下所示,在撰写文件中使用“主机名”有什么好处?

{ 
    "version": "2", 
    "services": { 
     "web": { 
      "image": "nodejs:latest", 
      "hostname": "web", 
      "ports": ["80"] 
     }, 
     "db": { 
      "image": "mysql:latest", 
      "hostname": "db", 
      "ports": ["3306"] 
     } 
    } 
} 

回答

3

version '2' of docker-compose syntax中引入了容器间私网自动发现主机的功能。在您只能通过链接别名引用容器之前。还有其他的解决方案来创造发现 - 例如。添加代理或“大使”容器。

话虽这么说,我会看到3个理由使用主机名:

  • 发现是基于服务的名称,它并不总是需要一个主机名。
  • 可以有一个服务(f.ex. Web服务器)
  • ,如果你想保持不同的环境之间的一致的配置,你可以使用主机名来描述应用程序正在使用,而不是依赖于其他服务端点多个主机名名称
+1

另请参见:我有一个包含2个名为“web”和“db”的服务(容器)的合成文件。 - 这些不是容器名称,而是服务名称。 容器名称已生成,但可以使用'container_name'属性进行设置。 –