我目前正在设置 UnraidOS 服务器,并且我的机器上有一堆 docker 镜像。我最近安装了一个 docker 容器,它根据 IP ping 其他容器并报告正常运行状态。正常运行的 docker 连接到网桥网络,并且只能访问网桥上的其他 docker 容器,而不能访问网络上的任何其他容器。我需要做什么才能允许我的正常运行的 docker 访问其他 IP?
我的 unraidOS 服务器有一个静态 IP 192.168.1.14
Docker 1: 192.168.1.14:8401 (bridge)
Docker 2: 192.168.1.14:8402 (bridge)
Docker 3: 192.168.1.14:8403 (bridge)
Uptime Docker 4: 192.168.1.14:8400 (bridge)
Docker 5: 192.168.1.15 (custom: br0)
Docker 6: 192.168.1.16 (custom: br0)
我的“Uptime Docker 4”能够 ping 并连接到 Docker 1、Docker 2 和 Docker 3,因为它们都在“bridge”网络时间上。Docker 5 和 Docker 6 都在“custom: br0”网络上,因此它们有自己的 IP 地址,而我的“Uptime Docker 4”无法连接到它,因为它在不同的网络上。
我的解决方案是什么,以便 Docker 5 和 Docker 6 仍然保留其 IP,但仍可被 Uptime Docker 4 访问?
我有另一台电脑连接到我的网络,其 IP 为 192.168.1.103,“Uptime Docker 4”可以 ping 通它。它仍然无法 ping 通“Docker 5”和“Docker 6”,尽管这些 IP 的分配方式与我的电脑一样。
更新:对于 UnraidOS 用户来说,在“设置”>“Docker”下有一个名为“主机访问自定义网络”的选项。如果启用此选项,您将能够访问连接到 br0 的主机。我将所有容器移至 br0,并为我的组织分配了自定义 IP。
笔记:如果您重新启动服务器,“主机访问自定义网络”失败(即使它显示它已打开),您需要停止Docker,关闭“主机访问自定义网络”启动docker,再次停止docker,启用“主机访问自定义网络”,然后重新启动它以正确激活更改。
答案1
默认桥接仅有的连接到默认桥上的其他容器,这样可以隔离容器并允许轻松设置而不会损害其他“生产”容器,这是设计使然。UnRaid 还只公开了一些容器设置选项,您可能需要使用终端来解决。
基本上,您的“桥接”容器都在 /16 子网上,这就是它们无法 ping 其他 IP 的原因。我建议您阅读以尽可能熟悉;https://docs.docker.com/network/network-tutorial-standalone/
运行docker network inspect bridge
检查设置。
要改变这种情况,您有几种选择;
您可以确认/编辑默认桥接网络设置。详细信息位于概述底部。如果您只想使用 ping,则不需要打开任何端口。根据您的本地网络更改网关/dns。https://docs.docker.com/network/bridge/#configure-the-default-bridge-network
你可以设置自己的 Docker 网络,并提供更多网络选项。这有点详细,你必须能够编辑 Docker 容器才能做到这一点,特别是更改它们的“网络驱动程序”,这是我没有把握UnRaid 有通过 GUI 提供的选项。https://docs.docker.com/network/network-tutorial-standalone/