让docker只使用一个特定的网卡

kni*_*ipp 6 networking docker

设置

我在 Debian 上的单个主机上运行 docker。主机为我的家庭网络运行各种不同的服务,例如监控软件、家庭自动化、日志聚合等。
我一开始只将一个物理网络适配器连接到系统,并创建了一些容器。后来,我添加了辅助 NIC,其想法是在仅用于 ssh 访问 docker 主机eth1时移动所有 docker 容器。eth0

版本信息

  • Debian 10“巴斯特”
  • 码头工人20.10.0
  • 核心4.19.0-13-amd64
  • 系统241-7~deb10u5 amd64
  • 存储驱动程序overlay2

问题

Docker 目前在 NIC 上发布所有容器,但我找不到一种干净简单的方法来限制仅公开服务eth1。这与我使用主机、桥接器还是自定义网络无关。

我尝试过但没有成功的事情

  • Docker 的daemon.json- 设置“ip”选项。对我来说,这看起来是最明显的解决方案,但它似乎没有效果,在重新启动和服务重新启动后,两个网络接口上的服务仍然可用。我什至在引入“ip”选项后从头开始重新创建了一个容器,也没有效果。目前,配置看起来非常简单:
{
   "ip" : "192.168.1.10",
   "graph": "/srv/docker"
}
Run Code Online (Sandbox Code Playgroud)

Docker 命令行参考解释了“ip”应该做什么

我研究过但不喜欢作为解决方案的事情

  • eth0在防火墙级别阻止访问,p22 除外。这会起作用,但对我来说感觉像是黑客。
  • 在每个容器上设置固定的IP地址。我尝试过,它确实有效,但我希望将此设置为服务器级别的默认值,而不是为每个容器手动指定它。如果 docker 主机 IP 发生变化,我必须为每个容器再次手动编辑它。

有想法吗?

一定有一种(可能很简单)的方法可以将主机网络从 更改0.0.0.0eth1的特定 IP 地址,但我一生都无法找到方法。

kni*_*ipp 1

我至少可以部分回答我自己的问题。在 docker 中指定“ip”参数时daemon.json,只有新创建的容器才会遵循该设置,并且仅绑定到配置的 IP 地址。但是,重新创建现有容器是不够的,它仍然会绑定到两个 NIC。您确实必须删除任何行为不当的容器,包括它们的卷和配置,并从头开始。我还没有找到一种方法来改变绑定而不必这样做。