• Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案


    docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯。

    最近更新 Docker for mac 之后,发现以前容器中可以访问的局域网内服务(使用宿主机所在的局域网 IP 访问),变得不可访问了。一开始以为是新版本改了默认网络配置,查了半天 release log 并没有找到相关条目。

    后来在同事的帮助下发现问题所在:

    由于换了新的工位,宿主机的局域网 IP 网段由 172.16.*.* 切换到了 172.17.*.* ,刚好和 docker 虚拟网桥 IP 段 172.17.*.* 冲突。

    解决问题的办法也很简单:

    1、如果是  Docker for mac,打开 Preferences -> Daemon -> Advanced ,修改(或增加)配置 {"bip" : "172.16.10.1/24"} ,从而避免网段冲突的问题;

    2、Linux 版本的 docker 配置,请参看这里:《Docker 修改默认的网段

    另外在问题解决的过程当中,发现了一些知识点:

    1、docker-compose 的网络配置字段为 network_mode: "host" 而非 net: "host"

    2、docker for mac 的容器里可以通过 docker.for.mac.host.internal 域名直接访问宿主机服务

    3、docker inspect <container_id> 命令,可以查看到容器的网络配置

  • 相关阅读:
    悬浮按钮
    C语言学习笔记
    python3之环境搭建以及基础语法
    设计模式之单例模式
    浅谈vuex
    用位运算替代js中的常见操作
    浅析Symbol
    egg.js源码解析之render()
    js的事件循环机制和任务队列
    浅谈js异步
  • 原文地址:https://www.cnblogs.com/kaiye/p/8663044.html
Copyright © 2020-2023  润新知