首页 > 解决方案 > docker-compose.yml 使用与 WiFi 的 IP 相同的网络 ipv4 后,为什么有些网站无法访问?

问题描述

上下文:我docker-compose.yml用来为 mongoDB 设置一个容器,其中网络设置如下

...
services:
    mongo:
        networks:
            mongodb_net:
                ipv4_address: 192.168.178.23
networks:
    mongodb_net:
        ipam:
            config:
                - subnet: 192.168.178.0/24
...

这与我的 WiFi 连接的 IP 地址完全相同。

问题

进行了上述设置后,为什么我的浏览器无法访问某些网站(例如 PING 不返回任何包)?

我尝试将 YAML 文件更改为其他 IP 地址,问题解决了。但我想了解是什么原因。是不是因为docker服务和WiFi占用了同一个IP,从而中断了正常的上网?

标签: dockerdocker-composeipipv4

解决方案


Docker 定义了自己的网络设置。ifconfig您可以在 Linux 上运行并查看iptables输出时看到这方面的一些细节。如果您手动将 Docker 网络配置为与外部网络具有相同的 CIDR 块,则可以按以下顺序结束:

  1. 我想拨打 8.8.8.8。
  2. 它不在我的任何本地网络上,所以我将路由到默认网关 192.168.178.1。
  3. 该地址位于docker1网络 192.168.178.0/24 上。

...并且出站数据包实际上从未离开您的主机。

您几乎不需要在 Docker 中手动配置 IP 地址或网络。它有自己的内部网络设置并为您处理。在 Compose 上下文中,Compose 还会做一些您通常需要的额外设置,例如创建default网络;Compose 中的网络有更多详细信息。

要从 Docker 空间外部访问容器,您需要ports:从该容器发布,然后可以通过发布端口的主机 IP 地址访问该容器。

services:
    mongo:
        ports: ['27017:27017']
        # no networks: or manual IP configuration; just use the `default` network

推荐阅读