Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在docker容器中使用iptables进行端口转发_Docker_Networking_Port_Ubuntu 16.04_Iptables - Fatal编程技术网

在docker容器中使用iptables进行端口转发

在docker容器中使用iptables进行端口转发,docker,networking,port,ubuntu-16.04,iptables,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 但是,呼叫没有路由到127.0.0.1。如果在UbuntuXeni

我在一个容器上运行两个服务(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
但是,呼叫没有路由到127.0.0.1。如果在UbuntuXenial虚拟机中完成,同样的步骤也会起作用。

您可以运行下面的

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>
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
欢迎来到nginx!

我看到的唯一区别是使用
输出链而不是
预路由
。这是因为本地生成的数据包跳过了预路由吗?我在某个地方读到过。@bgfvdu3w,我不是这方面的专家,我只是尝试了不同的东西,看到了效果
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>