为什么我在 docker 网络示例中看到 172.22.0.3?

dfr*_*kow 1 ip docker

此页面和此答案均引用 IP 地址 172.22.0.3。根据RFC 1918,该范围位于专用网络范围 172.16.0.0-172.31.255.255 内。它也在我自己的代码中(在docker中运行),但我忘记了为什么。

这是 Docker 的默认设置吗?能找到参考吗?

Dav*_*aze 5

作为实现细节,Docker 为创建的每个 Docker 网络分配该 IP 地址范围的一部分。在该地址范围内,通常 .1 地址是主机,然后为连接到网络的每个容器按顺序分配地址。

例如,在您链接到的答案中,Docker 很可能会将 172.22.0.0/16 分配给文件中列出的网络docker-compose.yml。那么 172.22.0.1 将是主机,172.22.0.2 将是 中的第一个容器docker-compose.yml,172.22.0.3 将是第二个 ( db)。当出现错误时,例如连接到 时db:27017,解析的地址可能会在错误消息中打印出来。

如果 Docker 内部 IP 地址被硬编码在应用程序中的某个位置,则可能是一个错误。如果您在其他地方重新启动容器,则无法保证会使用相同的地址甚至相同的网络。其他主机也无法访问这些地址;从虚拟机外部,如果 Docker 在虚拟机中运行;甚至来自同一主机上的非容器进程(本机 Linux 系统除外)。

Docker 文档中的Compose 中的网络是一个很好的实用参考。请注意,它根本没有描述此 IP 分配,因为它主要是实现细节。独立容器网络中的示例显示了用于转储 Docker 网络详细信息的低级诊断命令;虽然这些通常没什么用,但它们确实显示 Docker 在 172.{16...31} 保留范围内分配 /16 网络。