为什么安装 Docker 后默认 IPv6 地址发生变化以及如何避免这种情况

Why is the default IPv6 address changed after installing Docker and how to avoid it

我正在使用 Ansible 在 Debian 系统上安装 Docker。我需要在某些任务中识别 ansible_default_ipv6.address。安装 Docker 后,安装任务 returns 一个不同的 "default" (docker0 接口)而不是 "eth0" 或 "ens18" 或其他。所以这不是 Docker 的真正问题,而是网络接口的变化。如果您配置 OpenVPN 等,可能会发生这种情况。

我不明白,为什么 ansible_default_ipv6.address 变了(可能是因为 "d" 早于 "e")。我希望 "scope global" 比 docker0

中的 "scope global tentative" 更重要

而且 - 我怎样才能避免这种行为?定义关于接口或 IP 的每个主机变量是最佳做法吗?

你是对的,这是因为 "d" 在 "e" 之前:

理论上Ansible选择the device with the default gateway作为"default"接口。实际上,通常只是界面在字母表中排在第一位。

所以在安装 docker 之前,eth0 是默认界面,但是在安装 docker 之后有一个新的 docker0 界面(在 eth0 之前当按字母顺序排序时),因此 Ansible 现在将 docker0 声明为 "default" 接口。

解决方案:不要使用ansible_default_ipv6,而是使用接口特定的事实(ansible_eth0["ipv4"]...)