【问题标题】:Is it possible to expose docker ports to a specific interface是否可以将 docker 端口暴露给特定的接口
【发布时间】:2018-05-12 09:41:22
【问题描述】:

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

version: '2'

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

这使得它很脆弱,因为 IP 地址是通过 DHCP 分配的。使用了多个设备,其中每个设备可能具有不同的 IP 地址。因此,是否可以仅将端口公开给特定接口?另外,一切都在Resin.io上运行,限制了iptables和co的配置。

【问题讨论】:

    标签: docker networking docker-compose


    【解决方案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: 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 DROPwlan0 接口上断开与端口 1883 的连接)

    作为旁注,我鼓励您查看我们的社区论坛 (https://forums.resin.io),了解您可能遇到的任何有关 resin.io 的问题。我们的用户群在那里非常活跃,很可能会有更多人对您提出类似的问题或有用的建议。

    谢谢!

    【讨论】:

    • 相关问题,为什么 ResinIO 中的接口仍然称为 eth0 和 wlan0 而不是新的重整接口名称?
    • 稍微调整了 iptables 命令以丢弃除 eth0 上的数据包之外的所有内容并使用服务变量:iptables -A INPUT -i !$MOSQUITTO_INTERFACE -p tcp --destination-port 1883 -j DROP
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 2021-08-05
    • 1970-01-01
    • 2019-10-24
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多