Iptables
將 localhost 請求重定向到 Linux 容器
我在我的 Ubuntu 主機上執行了幾個 Linux 容器,每個容器都執行一個 webapp。要訪問 webapps,我使用
iptables
轉發埠:sudo iptables -t nat -A PREROUTING -p tcp --dport <port> -j DNAT --to-destination #<container_ip>:<port>
如果流量來自我的主機*之外,這很有效。*如果請求是由 localhost 完成的,則它不起作用:
curl <host_ip>:<port> #works (from outside the host) curl <container_ip>:<port> #works (from inside the host) curl 127.0.0.1:<port> #doesn't work (from inside the host)
我知道來自 localhost 的數據包不通過 iptables DNAT 規則,這就是它不起作用的原因。反正有沒有讓這個工作?
@Brigo:這是不正確的。nat 表可以包含一個 OUTPUT 鏈。問題是 nat 表的 PREROUTING 鏈沒有應用於環回介面。
@rmonjo,除了 PREROUTING 鏈之外,還使用 OUTPUT 鏈:
iptables -t nat -A OUTPUT -o lo -p tcp --dport <port> -j DNAT \ --to-destination #<container_ip>:<port>
編輯:這不起作用。我在考慮不會解決這個問題的 REDIRECT 目標。