簡體   English   中英

將 docker 容器暴露給外部服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM