Docker 网络工作原理详解

 更新时间:2026年05月09日 08:59:12   作者:小秦师傅  
这篇文章主要介绍了Docker 网络工作原理的相关资料,这里对Docker的网络工作进行了详细介绍,需要的朋友可以参考下

Docker 网络工作原理

当Docker server也就是docker daemon启动时,会自动创建一个名字是docker0的bridge,每当docker创建一个Container时,会在主机上面创建一个名字是veth*的ethernet 端口,并把这个eth*加入到docker0的bridge,在container中会自动创建一个名字是eth0的ethernet端口,这个eth0和veth*会形成一个类似管道的对,一一对应。

配置DNS

docker是如何分配每个container的hostname和DNS配置的,可以通过在contain中mount命令看出一些东西:

mount

...
/dev/disk/by-uuid/5f3d0920-98a8-434a-9c02-8163dccf6c62 on /etc/resolv.conf type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/disk/by-uuid/5f3d0920-98a8-434a-9c02-8163dccf6c62 on /etc/hostname type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/disk/by-uuid/5f3d0920-98a8-434a-9c02-8163dccf6c62 on /etc/hosts type ext4 (rw,relatime,errors=remount-ro,data=ordered)
...

docker run的-h 可以配置container的hostname,可以通过-h HOSTNAME或者--hostname=HOSTNAME来配置,docker会把HOSTNAME写入/etc/hostname

例如:

root@ubuu:/# cat /etc/hostname
ubuu

--link=CONNTAINER_NAMEorID:ALIAS,通过这个选项会在/etc/hosts中添加一个ALIAS,指向CONTAINER_NAMEorID, 无需知道具体的IP地址,可以直接使用ALIAS代替。

例如:

--dns=IP_ADDRESS, 会在/etc/resolv.conf的server标签中添加一个IP_ADDRESS

--dns-search=DOMAIN,会在/etc/resolv.conf的search标签中添加一个DOMAIN,如果一个example.com添加到search标签中,当container需要查找一个host的IP时,host.example.com同时也会被查找。

container中的/etc/resolv.conf是从主机中的/etc/resolv.conf拷贝而来,只不过是把主机本地的nameserver过滤掉,如果过滤之后没有任何的nameserver,docker会把google公共nameserver,8.8.8.8和8.8.4.4加入namerserver中。当主机的resolv.conf修改之后会通知container修改

container之间的通信和container和外部之间的通信

1.需要设置ip_forward系统参数,必须设置为1

$ sysctl net.ipv4.conf.all.forwarding
net.ipv4.conf.all.forwarding = 0
$ sysctl net.ipv4.conf.all.forwarding=1
$ sysctl net.ipv4.conf.all.forwarding
net.ipv4.conf.all.forwarding = 1

2.需要设置iptables,允许它们之间的通信

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 详解将本地docker容器迁移到服务端

    详解将本地docker容器迁移到服务端

    这篇文章主要介绍了详解将本地docker容器迁移到服务端,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • CentOS/RedHat 6.5 离线安装Docker

    CentOS/RedHat 6.5 离线安装Docker

    这篇文章主要介绍了CentOS/RedHat 6.5 离线安装Docker的相关资料,需要的朋友可以参考下
    2017-01-01
  • Docker容器如何开启特权模式

    Docker容器如何开启特权模式

    文章主要解决Docker容器中无法使用systemctl命令的问题,其原因在于大部分的系统镜像移除了init软件包,导致镜像中没有/sbin/init文件,解决方法是通过编写Dockerfile文件修改镜像,构建新的镜像,并运行新构建的镜像,需要注意的是,开启特权模式虽然方便,但可能存在安全风险
    2024-10-10
  • Mac OS如何添加docker环境变量

    Mac OS如何添加docker环境变量

    安装Docker Desktop后需手动将CLI路径添加至/etc/paths.d文件,以恢复命令行工具,通过创建对应文件并设置路径,重启终端后环境变量生效,即可正常使用Docker CLI
    2025-07-07
  • 基于Docker实现MySQL主从复制的详细教程

    基于Docker实现MySQL主从复制的详细教程

    这篇博客整理了如何在Docker环境下配置MySQL主从复制,通过创建和命名两个MySQL容器,设置独立IP,并详细说明了在宿主机上持久化数据、开启root远程访问及添加复制用户的过程,需要的朋友可以参考下
    2024-10-10
  • .netcore 使用surging框架发布到docker

    .netcore 使用surging框架发布到docker

    这篇文章主要介绍了netcore 使用surging框架发布到docker,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 本地使用docker打包部署镜像的方法

    本地使用docker打包部署镜像的方法

    这篇文章主要介绍了本地使用docker打包部署镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 在docker上安装运行mysql实例

    在docker上安装运行mysql实例

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
    2017-01-01
  • docker-compose+nginx部署前后端分离的项目实践

    docker-compose+nginx部署前后端分离的项目实践

    本文主要介绍了docker-compose + nginx部署前后端分离的项目,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 如何使用Docker搭建pypi私有仓库

    如何使用Docker搭建pypi私有仓库

    这篇文章主要介绍了如何使用Docker搭建pypi私有仓库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论