我的服务器有两个网络接口,eth0和wlan0,一个连接到互联网,另一个连接到内部网络 . 使用docker-compose将Docker容器端口暴露给特定接口的当前解决方案是使用:
version: '2'
services:
mosquitto:
ports:
- "192.168.0.1:1883:1883"
这使得它很脆弱,因为IP地址是通过DHCP分发的 . 使用了几个设备,每个设备可以具有不同的IP地址 . 因此,是否可以仅将端口暴露给特定接口?此外,一切都在Resin.io上运行,限制了iptables和co的配置 .
1 回答
你可以解决上面提到的两种阻滞剂中的任何一种:
关于动态DHCP IP,您可以按照以下有关设置静态IP的resin.io指南进行操作:https://docs.resin.io/reference/resinOS/network/2.x/#setting-a-static-ip . 设置静态IP后,您应该能够在
ports
配置中使用它 .另一种选择是在
mosquitto
应用程序容器中使用iptables . 这可以通过以下方式实现:a)为mosquitto服务设置
network_mode: host
和privileged: true
设置b)在Dockerfile中安装
iptables
作为RUN
指令的一部分(例如RUN apt-get update && apt-get install iptables
)c)配置iptables(例如
iptables -A INPUT -i eth0 -p tcp --destination-port 1883 -j DROP
以断开wlan0
接口上端口1883的连接)作为附注,我建议您查看我们的社区论坛(https://forums.resin.io),了解您可能遇到的任何resin.io问题 . 我们的用户群非常活跃,很可能会有更多人为您提供类似的问题或有用的建议 .
谢谢!