?
This document uses PHP Chinese website manual Release
注意:只有在使用 Compose 文件格式的版本2或更高版本時,本文才適用。網(wǎng)絡功能不支持版本1(傳統(tǒng))撰寫文件。
默認情況下,組合設置一個網(wǎng)絡你的應用程序。服務的每個容器都加入了默認網(wǎng)絡,并且兩者都是??蛇_網(wǎng)絡上的其他容器,以及可發(fā)現(xiàn)由它們在主機名上與容器名稱相同。
注:您的應用程序的網(wǎng)絡是根據(jù)“項目名稱”命名的,該名稱基于它所在的目錄的名稱??梢允褂?code>--project-name標志或者
COMPOSE_PROJECT_NAME
環(huán)境變量。
例如,假設應用程序位于一個名為myapp
,而你的docker-compose.yml
看起來是這樣的:
version: "3"services: web: build: . ports: - "8000:8000" db: image: postgres ports: - "8001:5432"
當運行docker-compose up
的時候,發(fā)生如下情況:
myapp_default
被創(chuàng)造了。
容器是使用web
的配置。它加入了網(wǎng)絡myapp_default
以這個名字web
。
容器是使用db
的配置。它加入了網(wǎng)絡myapp_default
以這個名字db
。
每個容器現(xiàn)在都可以查找主機名。web
或db
并獲取適當容器的
IP 地址。例如,web
的應用程序代碼可以連接到
URL postgres://db:5432
然后開始使用 Postgres 數(shù)據(jù)庫。
注意區(qū)分HOST_PORT
和區(qū)分是重要的CONTAINER_PORT
。在上面的例子中,db
中,HOST_PORT
是8001
和容器端口是5432
(postgres的默認值)。網(wǎng)絡服務對服務通信使用CONTAINER_PORT
。何時HOST_PORT
被定義,該服務也可以在群外訪問。
在web
容器,連接字符串到db
看起來就像postgres://db:5432
,從主機上看,連接字符串看起來像postgres://{DOCKER_IP}:8001
...
如果對服務進行配置更改并運行docker-compose up
要更新它,舊容器將被刪除,新容器將以不同的 IP 地址加入網(wǎng)絡,但名稱相同。正在運行的容器將能夠查找該名稱并連接到新地址,但舊地址將停止工作。
如果任何容器與舊容器有連接,則它們將被關閉。容器的責任是檢測此狀態(tài),再次查找名稱并重新連接。
鏈接允許您定義額外的別名,通過它可以從另一個服務訪問服務。他們不需要啟用服務進行通信 - 默認情況下,任何服務都可以以該服務的名稱到達任何其他服務。在以下示例中,db
可以從web
主機名db
和以下位置訪問database
:
version: "3"services: web: build: . links: - "db:database" db: image: postgres
見鏈接參考想了解更多信息。
注意:本節(jié)中的指示信息涉及傳統(tǒng)的 Docker Swarm 操作,并且僅在針對傳統(tǒng) Swarm 集群時才起作用。有關將撰寫項目部署到較新的集成群模式的說明,請參閱 Docker Stacks 文檔。
何時將組合應用程序部署到群集集群,您可以使用內置的overlay
驅動程序,以啟用容器之間的多主機通信,而不更改組合文件或應用程序代碼。
請參閱多主機網(wǎng)絡入門以了解如何設置 Swarm 群集。群集將overlay
默認使用該驅動程序,但如果您愿意,您可以明確指定它 - 請參閱下文了解如何執(zhí)行此操作。
您可以使用頂級networks
密鑰指定您自己的網(wǎng)絡,而不只是使用默認的應用程序網(wǎng)絡。這使您可以創(chuàng)建更復雜的拓撲并指定自定義網(wǎng)絡驅動程序和選項。您還可以使用它將服務連接到不受
Compose 管理的外部創(chuàng)建的網(wǎng)絡。
每項服務都可以使用服務級別 networks
密鑰來指定要連接的網(wǎng)絡,服務級別密鑰是頂級 networks
密鑰下引用條目的名稱列表。
以下是定義兩個自定義網(wǎng)絡的示例撰寫文件。proxy
服務與服務是隔離的db
,因為它們不共享共享的網(wǎng)絡 - app
只能與兩者通話。
version: "3"services: proxy: build: ./proxy networks: - frontend app: build: ./app networks: - frontend - backend db: image: postgres networks: - backend networks: frontend: # Use a custom driver driver: custom-driver-1 backend: # Use a custom driver which takes special options driver: custom-driver-2 driver_opts: foo: "1" bar: "2"
可以通過為每個連接的網(wǎng)絡設置 ipv4_address 和/或 ipv6_address 來為網(wǎng)絡配置靜態(tài) IP 地址。
有關可用網(wǎng)絡配置選項的詳細信息,請參閱下列參考資料:
頂層networks
鍵
服務級networks
鍵
除了指定您自己的網(wǎng)絡外,您還可以通過在networks
名稱下定義條目來更改應用程序范圍的默認網(wǎng)絡的設置default
:
version: "3"services: web: build: . ports: - "8000:8000" db: image: postgres networks: default: # Use a custom driver driver: custom-driver-1
如果希望容器加入現(xiàn)有網(wǎng)絡,請使用external
期權*
networks: default: external: name: my-pre-existing-network
而不是試圖創(chuàng)建一個名為[projectname]_default
,將尋找一個名為my-pre-existing-network
并將應用程序的容器連接到它。