文章目錄
- 1、常用模式
- 2、概念了解
- 2.1、Docker 內容器的通信
- 2.2、宿主機和 Docker容器的通信
1、常用模式
- 直接使用 端口映射,宿主機:宿主機端口->容器 ip:容器端口
- 端口映射+宿主機 hosts 映射,首先在宿主機
/etc/hosts
文件中增加 宿主機 ip:容器 hostName,然后借助端口映射機制,實現宿主機 hostName->宿主機,Docker內部依靠 hostName,變向實現了宿主機網絡和容器內網絡的統一 - 容器可以通過 host.docker.internal 訪問到宿主機
2、概念了解
2.1、Docker 內容器的通信
在Docker中,當多個容器連接到同一個自定義網絡時,它們可以通過以下兩種方式相互通信:
- IP地址通信:每個容器在自定義網絡上都會被分配一個唯一的IP地址。你可以使用這個IP地址來讓一個容器訪問另一個容器的服務。例如,如果容器A的IP地址是172.18.0.2,那么你可以在容器B中通過這個IP地址來訪問容器A。
- 容器名稱通信:更方便的是,你也可以直接使用容器的名稱來訪問其他容器。這是因為Docker會在自定義網絡中為每個容器設置DNS條目,使得容器名稱可以解析為該容器的IP地址。這樣,你就可以在容器B中直接通過容器A的名稱來訪問它,而無需知道其具體的IP地址。
2.2、宿主機和 Docker容器的通信
容器外部(通常指的是宿主機或者不在同一網絡橋接下的其他容器)默認情況下不能直接識別或通過IP或名稱訪問容器內的服務,除非滿足以下條件之一:
- 端口映射(Port Mapping):
當你啟動容器時,可以使用-p或–publish選項將容器內的端口映射到宿主機的端口。例如,如果你的容器監聽在80端口,并且你想讓它可以從宿主機外部訪問,你可以這樣做:
宿主機的8080端口的請求都會被轉發到容器內的80端口
docker run -d -p 8080:80 <image-name>
-
自定義網絡(Custom Network):
如果容器連接到了一個自定義網絡,并且這個網絡被配置成與宿主機網絡或其他網絡橋接,那么這些網絡上的主機可能能夠識別并訪問容器的IP地址或名稱。但是,這通常要求網絡配置允許跨網絡通信。 -
Host網絡模式(Host Networking Mode):
使用–network=host參數啟動容器時,容器將使用宿主機的網絡堆棧,這意味著容器的服務可以直接通過宿主機的IP地址和端口訪問,但這通常不推薦用于生產環境,因為它破壞了容器的隔離性。 -
NAT路由:
在某些情況下,宿主機上的NAT(Network Address Translation)規則可能會允許外部網絡訪問容器內的服務。這通常需要額外的網絡配置。