docker 容器自定义 hosts 网络访问操作

 更新时间:2021年03月19日 10:21:36   作者:心飞路漫  
这篇文章主要介绍了docker 容器自定义 hosts 网络访问操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在 docker-compose.yml 中增加 extra_hosts 关键字就可以将数据写入到容器的 /etc/hosts。

extra_hosts

添加主机名映射。

extra_hosts:

“somehost:162.242.195.82”

“otherhost:50.31.209.229”

将会在/etc/hosts创建记录:

162.242.195.82 somehost

50.31.209.229 otherhost

注意:

如果指向的是本机,不要写容器的ip,(因为IP重启后会变,除非你给容器设置固定ip)而是写宿主机的ip,如192.168.xxx.xxx

补充:Docker 网络:host模式

当我们准备将Docker技术应用到生产级别的场景时,我们需要了解很多网络方面的知识。网络是Docker中相对比较薄弱的部分,我们有必要了解Docker的网络知识,以满足更高的网络需求。

本节先对Docker网络模型中的host模型进行理论介绍,再通过案例的实操,让您更好地去理解docker网络模型。

Docker网络

当你安装完Docker时,它会自动创建三个网络。你可以使用以下docker network ls命令列出这些网络:

docker network ls

结果应如下

NETWORK ID     NAME        DRIVER       SCOPE
594430d2d4bb    bridge       bridge       local
d855b34c5d51    host        host        local
b1ecee29ed5e    none        null        local

Docker内置这三个网络,运行容器时,你可以使用该来指定容器应连接到哪些网络。

我们在使用docker run创建Docker容器时,可以用--network标志 选项指定容器的网络模式,Docker有以下4种网络模式:

host模式:使用 --net=host 指定。

none模式:使用 --net=none 指定。

bridge模式:使用 --net=bridge 指定,默认设置。

container模式:使用 --net=container:NAME_or_ID 指定。

host模式

Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。

host模式类似于Vmware的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。一个Docker容器一般会分配一个独立的Network Namespace。

但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

如下图所示:容器与主机在相同的网络命名空间下面,使用相同的网络协议栈,容器可以直接使用主机的所有网络接口

案例验证

查看主机链路接口

ip a

我们右侧云环境主机的IP为{host0.ip}/24上用host模式启动nginx容器,监听它的tcp80端口。

使用--net host参数来指定网络模型使用host模式

docker run --name=nginx --net=host -p 80:80 -d nginx

查看容器链路接口,与主机一致

docker exec -it nginx cat /etc/hosts

这时外界要访问容器中的应用,则直接使用{host0.ip}:80即可,不用任何NAT转换,就像直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

curl {host0.ip}

总结

host 模式简单并且性能高,host 模式下面的网络模型是最简单和最低延迟的模式,容器进程直接与主机网络接口通信,与物理机性能一致,host 不利于网络自定配置和管理,并且所有主机的容器使用相同的IP。

也不利于主机资源的利用。对网络性能要求比较高,可以使用该模式。否则应该使用其他模式

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • gitlab-runner中搭建nvm、nrm以及优化maven打包方式

    gitlab-runner中搭建nvm、nrm以及优化maven打包方式

    文章描述了如何在GitLab Runner上配置NVM、NRM,并优化Maven打包过程,通过上述配置和优化,作者将Maven打包时间从三分钟缩短到不到40秒
    2024-11-11
  • Windows10 Docker Desktop安装过程

    Windows10 Docker Desktop安装过程

    Docker Desktop是Docker公司推出的一款桌面应用程序,它提供了一个用户友好的界面,方便开发人员在本地环境中使用容器技术,这篇文章主要介绍了Windows10 Docker Desktop安装过程,需要的朋友可以参考下
    2024-01-01
  • 教你如何通过编写dockerfile部署python项目

    教你如何通过编写dockerfile部署python项目

    Dockerfile是一个放置在项目根目录下的描述文件,可以利用 Docker 命令基于该文件构建一个镜像,下面这篇文章主要给大家介绍了关于如何通过编写dockerfile部署python项目的相关资料,需要的朋友可以参考下
    2024-07-07
  • 在CentOS 7上安装Docker环境的方法与注意事项

    在CentOS 7上安装Docker环境的方法与注意事项

    这篇文章主要介绍了在CentOS 7上安装Docker环境的方法与注意事项,需要的朋友可以参考下
    2016-10-10
  • Docker如何自定义网络实现容器互通

    Docker如何自定义网络实现容器互通

    这篇文章主要为大家详细介绍了Docker如何通过自定义网络实现容器互通,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • 最新IDEA快速实现Docker镜像部署运行的过程详解

    最新IDEA快速实现Docker镜像部署运行的过程详解

    这篇文章主要介绍了最新IDEA快速实现Docker镜像部署运行的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • docker如何导出指定时间段内日志

    docker如何导出指定时间段内日志

    这篇文章主要介绍了docker如何导出指定时间段内日志问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • docker如何部署tomcat应用

    docker如何部署tomcat应用

    这篇文章主要介绍了docker如何部署tomcat应用问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • docker安装RabbitMq添加用户实现方式

    docker安装RabbitMq添加用户实现方式

    这篇文章主要介绍了docker安装RabbitMq添加用户实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 关于docker compose安装redis集群的问题(集群扩容、集群收缩)

    关于docker compose安装redis集群的问题(集群扩容、集群收缩)

    这篇文章主要介绍了docker compose安装redis集群、集群扩容、集群收缩,主要包括redis配置信息模板,编写批量生成配置文件脚本的相关命令,需要的朋友参考下吧
    2022-03-03

最新评论