【问题标题】:Docker: How to redirect a IP within a container to another IPDocker:如何将容器内的 IP 重定向到另一个 IP
【发布时间】:2019-02-08 22:52:08
【问题描述】:

我从未接触过 Docker 的 iptables,但现在我想我必须这样做。 在一个特殊的容器中,一个程序/脚本调用一个 IP 57.55.10.210 我无法改变它(另一个故事)。我想转接电话 到这个IP到192.168.38.13。如何做到这一点,这会对其他容器产生影响吗? 提前致谢! 弗兰克

【问题讨论】:

  • 这个主题已经打开,你可以在下面查看。如果您需要问任何问题,请说清楚。 serverfault.com/questions/654441/… 亲切的问候 Servet TAS
  • 我不太确定,但另一篇文章是关于如何将 IP 重定向到 docker 容器。就我而言,我想将调用重定向到容器中的另一个 IP。
  • ok FrankS77 告诉我你想要重定向端口基地吗?还是全部重定向?
  • 所有重定向。谢谢!
  • @ServetTAS:你能帮我解决这个问题吗?

标签: docker iptables


【解决方案1】:

一种方法是在您的容器映像中安装 iptables 并将内核分配给您的容器capability(7)NET_ADMIN

docker run --cap-add=NET_ADMIN ...

请参阅docker run reference 和/或docker-compose file reference

然后您可以添加入口点脚本、cmd 或.rules 文件,您可以在启动容器时从中加载规则集。或者您直接将规则嵌入到图像中。在您的情况下,入口点脚本的内容如下所示:

iptables -t nat -A PREROUTING -d 57.55.10.210 -j DNAT --to-destination 192.168.38.13
iptables -t nat -A POSTROUTING -s 192.168.38.13 -j SNAT --to-source 57.55.10.210

或者使用 .rules 文件,在您的入口点脚本中执行以下操作:

/sbin/iptables-restore /some-mounted-volume-or-file

为了获得规则文件,您可以调用容器的单次运行:

docker run --cap-add=NET_ADMIN --rm somethingwith/iptables /bin/bash -c "iptables -t nat -A PREROUTING -d 57.55.10.210 -j DNAT --to-destination 192.168.38.13; iptables -t nat -A POSTROUTING -s 192.168.38.13 -j SNAT --to-source 57.55.10.210; /sbin/iptables-save" > outside-of-container.rules

这会让你得到类似的东西:

# Generated by iptables-save v1.6.1 on Fri Feb  8 14:42:52 2019
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 57.55.10.210/32 -j DNAT --to-destination 192.168.38.13
-A POSTROUTING -s 192.168.38.13/32 -j SNAT --to-source 57.55.10.210
COMMIT
# Completed on Fri Feb  8 14:42:52 2019

据我所知,这种方法不应该干扰主机上的其他容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多