Docker 桥接网络阴影了 SSH 客户端的 IP,如何正常恢复?

Docker 桥接网络阴影了 SSH 客户端的 IP,如何正常恢复?

我们正在运行带有 Docker 的 RHEL 7 VM 来托管一些内部服务。上次我启动docker-compose up新的 Docker 容器时,我丢失了与服务器的 SSH 连接,也无法重新建立它。

一位同事能够诊断出问题出在执行命令时创建的新 Docker 网络docker-compose,其 IP 范围恰好与我连接的机器所在的 IP 范围重叠。我的同事能够通过关闭 Docker 守护进程并删除 Docker 创建的指向有问题的 Docker 网络桥的静态路由来重新获得我的访问权限。他之所以能够做到这一点,是因为他有另一台与有问题的机器位于同一子网中的机器,他可以通过这台机器进行连接。

现在我遇到的问题是,虽然能够再次连接到服务器,但我无法启动 Docker 守护程序,否则它也会恢复那个行为不正常的网络并再次切断我的连接。但是,我也无法先使用docker network rmdocker network prune删除网络,因为这些命令只有在 Docker 守护程序正在运行时才有效。我无法访问 IP 与所述 IP 范围不冲突且具有访问我试图恢复的机器所需的防火墙规则的机器。

有没有办法优雅地解决这种情况并让 Docker 守护程序再次运行而不会失去对机器的访问权限?如果有必要,删除与所述网络相关的容器是没有问题的。如果我能够让机器恢复到工作状态,我会很高兴。

我从中学到这个帖子可以配置 Docker 可以使用的 IP 范围,一旦一切恢复正常,我肯定会这样做。这是否已经解决了问题,还是只会影响未来由 Docker 创建的网络?

答案1

我找到了一个可以说是非正统的解决方案,但它确实有效:我编写了一个脚本,启动 Docker 守护程序,删除有问题的网络,记录已删除的网络,并再次停止 Docker 守护程序,以防它不起作用。这样,我可以让该脚本在后台运行,并执行必要的命令,即使我的 SSH 会话中断。这样我就可以回来,检查日志以查看有问题的网络是否消失,最后再次启动 docker 守护程序而不会被踢出。

这不是最优雅的脚本,所以我需要做一些清理工作,但 Docker 可以再次运行了。

相关内容