是否可以将docker端口暴露给特定接口

时间:2018-05-12 09:41:23

标签: docker networking docker-compose

我的服务器有两个网络接口,eth0和wlan0,一个连接到互联网,另一个连接到内部网络。使用docker-compose将Docker容器端口暴露给特定接口的当前解决方案是使用:

version: '2'

services:
  mosquitto:
    ports:
      - "192.168.0.1:1883:1883"

这使得它很脆弱,因为IP地址是通过DHCP分发的。使用了几个设备,每个设备可以具有不同的IP地址。因此,是否可以仅将端口暴露给特定接口?此外,所有内容都在Resin.io上运行,限制了iptables和co。

的配置

1 个答案:

答案 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: hostprivileged: 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问题。我们的用户群非常活跃,可能会有更多人为您提出类似的问题或有用的建议。

谢谢!