如何将Docker容器绑定到特定的外部接口

azpvetkf  于 2023-04-29  发布在  Docker
关注(0)|答案(3)|浏览(121)

我有两个网络接口eth0eth1
如何将所有的docker容器绑定到eth1,并让所有的网络流量通过eth1进出
谢谢~

更新

我尝试用133绑定到eth1。130.60.36.
但是我还是没有运气,我仍然得到了eth0 IP作为容器中的公共IP。网络流量不通过eth 1流出

➜  ~  docker run -d --name Peach_1 -p 133.130.60.36::9998 -ti sample/ubuntu-vnc-selenium-firefox

➜  ~  docker ps
CONTAINER ID        IMAGE                                 COMMAND                CREATED             STATUS              PORTS                                     NAMES
eb28f0d1c337        sample/ubuntu-vnc-selenium-firefox   "/opt/bin/run_sele_s   4 minutes ago       Up 4 minutes        5901/tcp, 133.130.60.36:32768->9998/tcp   Peach_1

➜  ~  docker exec -ti Peach_1 zsh

➜  /  curl ipecho.net/plain ; echo
133.130.101.114
r8uurelv

r8uurelv1#

这是docker docs的一些东西
https://docs.docker.com/v17.09/engine/userguide/networking/default_network/binding/
如果您希望限制更严格,并且只允许通过主机上的特定外部接口联系容器服务,则有两种选择。当你调用docker run时,你可以使用-p IP:host_port:container_port-p IP::port来指定一个特定绑定的外部接口。或者,如果您总是希望Docker端口转发绑定到一个特定的IP地址,您可以编辑系统范围的Docker服务器设置并添加选项--ip=IP_ADDRESS。请记住在编辑此设置后重新启动Docker服务器。

vuktfyat

vuktfyat2#

将IP放入-p只对到达服务器的流量有效,对于离开服务器的流量,您可以为每个容器分配静态本地IP,然后在iptablessnat中更改源IP。以下是iptables规则的示例:

iptables -t nat -I POSTROUTING -p all -s 172.20.128.2 ! -d 172.20.128.2 -j SNAT --to-source YourInterfaceIP
vq8itlhq

vq8itlhq3#

我已经读完了整篇文章,但我还是迷路了。这似乎是最可靠的职位,但在我的情况下,让我们说:

设置:

eth0 - 192.168.1.0 - default
eth1 - 192.168.2.0 - secondary
docker-network - 172.20.0.0

当我在主机上触发curl https://ifconfig.me/时,我将接收eth0的IP

我想达到的目标

我想要一个静态IP 172.20.0.100的容器,通过eth1接口触发curl请求。

我所尝试的

我添加了以下内容:

iptables -t nat -I POSTROUTING -p all -s 172.20.0.100 ! -d 172.20.0.100 -j SNAT --to-source 192.168.2.1

但在跑步时:

docker run --rm --network docker-network --ip 172.20.0.100 byrnedo/alpine-curl -m 10 https://ifconfig.me/ip

这会导致超时。
令人惊讶的是,当我将eth1 IP与eth0 IP交换时,如下所示

iptables -t nat -I POSTROUTING -p all -s 172.20.0.100 ! -d 172.20.0.100 -j SNAT --to-source 192.168.1.1

结果与预期一致,因此我收到了eth0的IP
你能告诉我我错过了什么吗?

相关问题