docker - 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,从而中断了正常的上网?
解决方案
Docker 定义了自己的网络设置。ifconfig
您可以在 Linux 上运行并查看iptables
输出时看到这方面的一些细节。如果您手动将 Docker 网络配置为与外部网络具有相同的 CIDR 块,则可以按以下顺序结束:
- 我想拨打 8.8.8.8。
- 它不在我的任何本地网络上,所以我将路由到默认网关 192.168.178.1。
- 该地址位于
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
推荐阅读
- docker - 在容器中使用证书 (.pem) 文件的最佳实践
- javascript - TypeError:无法读取事件侦听器中 event.target 的未定义属性“目标”
- google-analytics - Google Analytics(分析)自定义维度未跟踪
- google-chrome - 如何同时显示样式和计算?
- java - 将图像转换为固定格式以丢弃所有额外的注释
- react-native - React-native 短信检索器未按预期工作
- json - 您现在知道如何更新函数中的 json 吗?(API,角度)
- c++ - ctest 报告退出状态为 1 的测试成功
- javascript - Firebase 函数无法获取从 Angular9 中的简单联系表单发送的请求值
- r - 在 R 中,如何一次性在数据帧上使用 p.adjust 的所有方法?