2017-02-17 133 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'屬性進行設置。 –