各位好,
我在Ubuntu上安裝Docker並建置一個Web App,區網下可以正常存取Web App,如果從Internet IP則無法存取,想請問是否有人可以指導如何修改Ubuntu的NAT?
使用10.0.1.10:9000可以正常存取,但用Internet IP xxx.xxx.xxx.xxx:9000就無法正常存取
以下是目前的架構圖
謝謝
在 Ubuntu 上安裝 Docker 後,預設的 Docker container 是使用 NAT 網路模式的,此模式下 container 會被隱藏在 host 的內部網路中,無法直接從 Internet 存取。若要讓從 Internet 存取 Docker container,可以使用以下方法:
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。