從本機 Docker 主機連線時,使用主機發布埠 (published port);從共用網路 (Network) 的另一個容器 (Container) 連線時,使用服務名稱 (Service name) 與容器埠 (target port)。內建「主機與容器的不同埠」範例中,database 宣告 ports: 15432:5432,未指定主機綁定位址 (Host binding),api 與 database 共用 default 網路。從 api 出發的候選位址是 database:5432,從本機 Docker 主機出發則是 localhost:15432。這些位址依本範例設定推導,未實測連線。
跨服務連線時,只有兩個服務共用受支援的網路 (Network),診斷器才提供服務名稱 (Service name) 的候選位址。容器 (Container) 內的 localhost 指向該容器自己。每個結果會列出設定路徑,例如 services.database.ports[0] 與來源、目的服務的 networks;自行填入的監聽埠 (Listening port) 則標示為 manual。若已宣告網路沒有交集,結果只表示「兩服務沒有共用的已宣告網路」,不排除所有其他路徑,也不實測 Docker 網路。
工具在瀏覽器 (Browser) 中分析單份 Compose YAML,不啟動 Docker、不執行 curl,也不實測連線。輸入上限為 1 MiB(1,048,576 個 UTF-8 位元組 (Byte))、100 個服務,以及 ports/expose 合計 500 筆項目。未解析變數 (Variable)、埠號範圍 (Port range)、外部網路 (External network)、network_mode、include 等不支援設定會顯示不支援或無法判定,不猜測結果。分析無法證明程式正在執行或監聽。
關於這個主題的常見疑問與實用解答。
取決於連線起點。內建範例中,database 宣告 15432:5432,未指定主機綁定位址 (Host binding),api 與 database 共用 default 網路 (Network)。從本機 Docker 主機出發,候選位址為 localhost:15432,使用主機發布埠 (published port);從 api 出發則為 database:5432,使用服務名稱 (Service name) 與容器埠 (target port)。綁定位址或網路設定不同時,結果可能改變;兩個候選都不代表已連通。
容器內的 localhost 指向該容器自己,不是另一個服務或 Docker 主機。來源與目的都在同一容器時,可以使用 localhost。要連到共用受支援網路 (Network) 的另一個服務,請使用服務名稱 (Service name) 與容器埠 (target port),例如內建範例的 database:5432。工具只指出這種設定不符,並未測試程式是否接受連線。
只有 expose 不會發布主機埠。ports 若指定固定主機發布埠 (published port),工具才能推導固定主機候選位址;沒有固定值時,無法從 YAML 推出固定主機埠,Docker 可能在執行時 (Runtime) 動態分配,可用 docker compose port 查詢。共用網路 (Network) 的服務不需要 expose 才能連線。若未宣告埠,可填入你已確認的 TCP 監聽埠 (Listening port);工具不會從映像 (Image) 名稱推測。
在工具支援的設定模型中,來源與目的服務的已宣告網路沒有交集,因此無法提供兩者之間直接使用服務名稱 (Service name) 的候選位址。服務省略 networks 或使用空的 networks 集合時,Compose 會使用 default 網路。separate 結果不代表所有可能路徑都被阻擋,也不是完整連線測試;請核對列出的網路設定路徑及其他明確設定的路徑。
不代表。符合只表示你填入的主機名稱 (Hostname) 與埠號 (Port) 和設定推導的候選相同。工具未檢查程式是否啟動、監聽介面 (Listening interface) 或埠、通訊協定 (Protocol) 處理、防火牆 (Firewall) 或驗證 (Authentication),也不啟動 Docker 或對服務發出網路請求 (Network request)。請另行確認這些執行時 (Runtime) 條件,才能判斷服務是否可連線。
診斷器只處理單份已解析的 Compose YAML,以及有限的一般 bridge 網路 (Bridge network) 與埠號 (Port) 設定,未支援全部 Compose 功能。它不解析變數、埠號範圍 (Port range)、include、外部網路、profiles 或 network_mode;影響所選路徑時,會顯示無法判定或不支援,不捏造位址。可先執行 docker compose config 解析變數、整合檔案,再貼上產生的 YAML;執行時 (Runtime) 依賴與剩餘的不支援語意仍須另行確認。