Networking Docker强制容器到特定物理接口

Networking Docker强制容器到特定物理接口,networking,docker,docker-compose,Networking,Docker,Docker Compose,在过去的一周左右的时间里,我一直在互联网上寻找解决方案,但到目前为止,我还是空手而归 我的主机有三个可用的网络接口,我需要在wlan1接口上执行一个phantomjs脚本 我的想法是利用Docker,但我遇到了将容器锁定到特定接口的问题 这是我尝试过的,所有这些都重定向到另一个接口,或者没有网络访问。唯一允许显式访问我需要的接口的方法是关闭所有其他接口 /etc/systemd/system/docker.service.d/docker.conf [Service] ExecStart= Ex

在过去的一周左右的时间里,我一直在互联网上寻找解决方案,但到目前为止,我还是空手而归

我的主机有三个可用的网络接口,我需要在wlan1接口上执行一个phantomjs脚本

我的想法是利用Docker,但我遇到了将容器锁定到特定接口的问题

这是我尝试过的,所有这些都重定向到另一个接口,或者没有网络访问。唯一允许显式访问我需要的接口的方法是关闭所有其他接口

/etc/systemd/system/docker.service.d/docker.conf

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -b=wlan1 --ip=10.0.0.151 -H fd://
docker compose.yml

version: "2"

networks:
  open_network_1:
    driver: bridge
    driver_opts:
      com.docker.network.host_binding_ipv4: "10.0.0.151"

services:
  open_wifi_phantomjs:
    image: https://github.com/ollihoo/phantomjs-docker-rpi
    networks:
      - open_network_1
    ports:
      - 10.0.0.151:80:80
      - 10.0.0.151:443:443
我还摆弄了ip路由和iptables

ip route del 172.19.0.0/16
ip route add 172.19.0.0/16 dev wlan1 proto kernel scope link src 172.19.0.1

iptables -t nat -A POSTROUTING -s 172.19.0.0/16 -j SNAT --to-source 10.0.0.151
172.19将是docker compose网络创建的子网,10.0.0.151将是分配给wlan1接口的ip


任何洞察都将不胜感激,我相信这将帮助那些有类似目标的人

因此,您希望所有来自容器的传出请求都具有WLAN1IP的源地址10.0.0.151,并路由到该接口?这可能会有所帮助,mcvlan部分:这篇文章实际上帮助很大,谢谢。Macvlan有一个独立于物理适配器的mac地址,控制器使用wifi将mac地址作为身份验证的基础。LinuxBridge的部分功能将非常出色,但无法连接wifi适配器,并且解决方法不适用于我的驱动程序。我正在尝试运行一个phantomjs脚本来自动接受一个开放式wifi协议进行内部速度测试。Phantomjs不允许选择接口,所以Docker是我目前唯一的希望。仍在修补PID路由,可能有问题。我找到了一个可能的解决办法。我可以设置无线网关的默认路由:
route add default gw 10.0.0.1
,使用
route
命令查看可用路由。但是,这对于主机来说是变化的,不是特别针对Docker容器,而是出于我的目的。因此,您希望容器发出的所有请求都有一个wlan1 ip的源地址,10.0.0.151,并路由到该接口?这可能会有所帮助,mcvlan部分:这篇文章实际上帮助很大,谢谢。Macvlan有一个独立于物理适配器的mac地址,控制器使用wifi将mac地址作为身份验证的基础。LinuxBridge的部分功能将非常出色,但无法连接wifi适配器,并且解决方法不适用于我的驱动程序。我正在尝试运行一个phantomjs脚本来自动接受一个开放式wifi协议进行内部速度测试。Phantomjs不允许选择接口,所以Docker是我目前唯一的希望。仍在修补PID路由,可能有问题。我找到了一个可能的解决办法。我可以设置无线网关的默认路由:
route add default gw 10.0.0.1
,使用
route
命令查看可用路由。但是,这对于主机来说是变化的,并不是特别针对Docker容器,而是适用于我的目的。