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

Why do I see 172.22.0.3 in docker networking examples?

This page and both reference the IP address 172.22.0.3. By RFC 1918,即私网范围172.16.0.0-172.31.255.255内。它也在我自己的代码中(运行 in docker),但我忘记了为什么。

它是 Docker 默认值吗?你能找到参考吗?

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

例如,在您 link 的回答中,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 地址在您的应用程序中的某个地方被硬编码,那可能是一个错误。如果您在其他地方重新启动容器,则不能保证会使用相同的地址甚至相同的网络。这些地址也无法从其他主机访问;从 VM 外部,如果 Docker 在 VM 中是 运行;甚至来自同一主机上的非容器进程,本机 Linux 系统除外。

Networking in Compose in the Docker documentation is a good practical reference. Note that it doesn't describe this IP allocation at all, since it's mostly an implementation detail. The examples in Networking with standalone containers 显示低级诊断命令以转储 Docker 网络详细信息;虽然这些通常没有用,但它们确实显示 Docker 在 172.{16...31} 保留范围内分配 /16 网络。