[英]Exposing docker container to outside service
這不是 dockerized 版本:目前我有一個使用兩個地址與外界通信的服務。 第一個地址是一個 tcp 0.0.0.0:5000
,這是網絡服務,所以當我只輸入http://localhost:5000
或任何其他地址時,它就可以工作。 另一個是 udp 服務,它綁定到作為偵聽器的地址並將消息發送到外部服務,例如:
UDP 客戶端在 ip 端點0.0.0.0:8000
上接收消息並在例如 localhost:8001 上發送它們(主機上有一個接收和重新發送消息的服務)
所以它可以在沒有 docker 的情況下工作。
現在有一個問題,我已將其轉換為 docker 映像和組件,但在通過 udp 向 docker 主機上的服務發送消息時遇到問題。
所以我嘗試使用以下命令在 docker compose 中重定向端口:
version: '3.9'
services:
app:
build:
context: ../../
dockerfile: /app/_docker/Dockerfile
container_name: app
restart: always
ports:
- 5000:5000 #for web
- 8000:8000 #for udp receiver
- 8001:8001 #for udp sender
現在網絡工作(我已經檢查過)並且 UDP 接收器可能工作,因為它綁定到廣播地址,但我無法向外部主機發送消息(主機上的 UDP 接收器也綁定到0.0.0.0:8001
並將消息發送到遠程 ip - 這意味着它應該是我的 docker 鏡像的 ip)。
我也累了:
services:
app:
build:
context: ../../
dockerfile: /app/_docker/Dockerfile
container_name: app
restart: always
network_mode: "host"
但現在沒有任何效果(我輸入localhost:5000
什么也沒有)。
那么這種類型的交流是可能的,如果是的話,我做錯了什么?
此外,我正在使用 Windows,但這也將部署在 linux 上,並且無法在響應我的 UDP 請求的主機上 dockerize 服務。
編輯:
Maybyu 我已將端口轉發更改為如下所示:
- 5000:5000
- 50005:50005/udp
- 50000:50000/udp
我注意到如果我輸入http://172.21.232.161:5000/ (因為 172.21.232.161 是我的 HyperV 接口地址或 docker0 在 linux 的情況下)它適用於網絡
我已經檢查了我的 docker 容器的網關和容器 ip,它看起來像:
"Gateway": "172.31.0.1",
"IPAddress": "172.31.0.4"
所以我可能期望當在主機上的 172.21.232.161:8000 上綁定 UDP 接收器並將幀從 docker 發送到 UDP 上的 172.31.0.1:8000 時,它應該可以工作。 但事實並非如此。 那么我應該把什么放在發送端點(172.31.0.1:8000)上以在主機上接收消息?
經過多次戰斗,答案很簡單..如果我的 Windows 主機有外部 IP,例如 10.0.0.4 容器將在 10.0.0.4:8000(或 host.docker.internal)上發送消息並在 0.0.0.0:8001 上接收消息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.