使用docker容器内的iptables进行端口转发

时间:2017-09-21 17:16:57

标签: docker networking port ubuntu-16.04 iptables

我在一个容器上运行两个服务(A& B)。一个服务模仿另一个服务所需的依赖项。

服务A是一个黑盒子,可以拨打IP 169.254.169.254。我想使用iptables将该调用转发给服务B.

我正在启动这样的容器,所以它可以拥有自己的iptables,

docker run -it --cap-add=NET_ADMIN --sysctl net.ipv4.conf.eth0.route_localnet=1 <name> bash

一旦进入bash,我配置iptables转发呼叫,

iptables -t nat -I PREROUTING -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination "127.0.0.1:8099" -i eth0

但是,呼叫未被路由到127.0.0.1。如果在Ubuntu Xenial VM中完成,则同一组步骤可以工作。

1 个答案:

答案 0 :(得分:0)

您可以运行以下

iptables -t nat -A OUTPUT -p tcp --dport 80 -d 169.254.169.254 -j DNAT --to-destination 127.0.0.1:8099

我使用下面的容器对我的容器做了一个简单的测试,效果很好

root@a09ced7f6961:/# iptables -t nat -A OUTPUT -p tcp --dport 8080 -d 123.45.67.89 -j DNAT --to-destination 127.0.0.1:80

root@a09ced7f6961:/# curl 123.45.67.89:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>