iT邦幫忙

0

Ubuntu Docker阜號對應

  • 分享至 

  • xImage

各位好,

我在Ubuntu上安裝Docker並建置一個Web App,區網下可以正常存取Web App,如果從Internet IP則無法存取,想請問是否有人可以指導如何修改Ubuntu的NAT?

使用10.0.1.10:9000可以正常存取,但用Internet IP xxx.xxx.xxx.xxx:9000就無法正常存取

以下是目前的架構圖
Structure

謝謝

看更多先前的討論...收起先前的討論...
ifurther iT邦新手 4 級 ‧ 2021-09-20 16:48:54 檢舉
請問防火牆有開嗎? 看起來NAT應該是要修改路由器的部份,小型測試可以考慮像是 ngrok 的服務
有查過iptables相關資料,但還沒有頭緒怎麼下手
就對發給你 Ubuntu IP 的路由器做 port forwarding 就可以了。
我目前的頭緒是應該要從Ubuntu上的NAT或是Port Forwarding下手,但不知道怎麼做...
froce iT邦大師 1 級 ‧ 2021-09-20 20:48:17 檢舉
你這該開放的是網際網路router的NAT,跟ubuntu無關。
你能在10.0.1.10:9000存取就ok了。
@force, 太感謝你的提點,回頭檢查NAT那邊的Port確實沒有開,調整後,已經可以從公網IP存取到App了,謝謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-21 10:37:05

在 Ubuntu 上安裝 Docker 後,預設的 Docker container 是使用 NAT 網路模式的,此模式下 container 會被隱藏在 host 的內部網路中,無法直接從 Internet 存取。若要讓從 Internet 存取 Docker container,可以使用以下方法:

  1. 在 Docker 建立 container 時,使用 -p 參數指定 host 和 container 的 port 對應關係,例如:
docker run -p 9000:9000 my-web-app

表示將 host 的 9000 port 與 container 的 9000 port 對應,透過 host 的 IP 與 port 存取 container。

2.在 host 上設定防火牆規則,開啟 9000 port,例如:

sudo ufw allow 9000/tcp

這樣從 Internet 上就可以存取 host 的 9000 port,再透過 Docker container 設定的 port 對應關係存取 container。

3.如果您的 host 使用的是 NAT 網路,可以透過 port forwarding 讓從 Internet 存取 host 的 port 時,轉發到 Docker container 中。例如:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.17.0.2:9000

這樣從 Internet 存取 host 的 9000 port 時,就會轉發到 Docker container 中。

請注意,以上方法都需要在 host 上開啟對應的 port,也需要對應 Docker container 中應用程式使用的 port。

我要發表回答

立即登入回答