我的服务器有两个网络接口,eth0和wlan0,一个连接到互联网,另一个连接到内部网络。使用docker-compose将Docker容器端口暴露给特定接口的当前解决方案是使用:
version: '2'
services:
mosquitto:
ports:
- "192.168.0.1:1883:1883"
这使得它很脆弱,因为IP地址是通过DHCP分发的。使用了几个设备,每个设备可以具有不同的IP地址。因此,是否可以仅将端口暴露给特定接口?此外,所有内容都在Resin.io上运行,限制了iptables和co。
的配置答案 0 :(得分:3)
您可以解决上述两种阻断剂中的任何一种:
关于动态DHCP IP,您可以按照此resin.io指南来设置静态IP: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问题。我们的用户群非常活跃,可能会有更多人为您提出类似的问题或有用的建议。
谢谢!