容器"共享"宿主机的hosts文件(终极方案)

Runner_Jack Runner_Jack     2022-11-16     567

关键词:

0.背景

有时候制作docker镜像生成容器时需要宿主机的hosts文件共享到容器中。首先想的是通过挂载的方式共享hosts文件,但是实践时发现根本行不通,hosts文件在/etc/目录下,如进行挂载将会将/etc/目录全部共享到容器中,如果容器与宿主机的系统不一致,这样挂载会给容器的微系统带来无法正常运行的风险。后来实践后,即使将/etc目录进行挂载也是无效的。所以通过挂载/etc/目录是行不通的。后经网上查阅其他方法也没有合适解决方案,以下是我个人的想法。

1、方法

既然挂载方式行不能,能不能在生成容器时动态把hosts文件的关系动态加载到容器的hosts文件里面去呢?经过收集资料后最后也找到解决方法,利用awk命令与docker的--add-host参数。思路就是动态读取hosts文件,并将数据拼接成--add-host所要的格式(以下是个例子):

*********************************

docker run -it \
--name mockdata \
-v /bigdata/MockData:/bigdata/MockData \
--restart always \
$(cat /etc/hosts|awk -F ‘ ‘ ‘if(NR>2)print "--add-host " $2 ":" $1‘) \
mockdata \
bin/sh

*********************************

重点就是在黄色部分,将hosts文件动态读取,拼接成--add-host所要的格式,红色部分是过滤头hosts文件的头两行(不要我想要的)。

2、缺点

不能动态加载宿主机的hosts文件,如果宿主机的hosts文件发生变化,将容器删除后重新生成。容器只提供服务,不保存数据,所以删除重新生成是可以的。

docker网络-2(代码片段)

容器跨主机通信实验搭建“网络1”解决了同一宿主机间不同网络间通信,基于bridge网络容器间没办法在互联网中通信(不同宿主机间通信),只能在同一个宿主机内不同容器间通信。host网络直接使用宿主机网络,性能无衰减,... 查看详情

kafka集群部署(docker容器的方式)

参考技术A文章主要介绍以docker容器的方式部署kafka集群。上述配置文件中的server.x,数字x对应到data/myid文件中的值。三台机器x的值分别就是1,2,3。参数详细说明请参考官网文档。1.--net=host:容器与主机共享同一NetworkNamespace,即容... 查看详情

虚拟机如何与主机共享文件夹

...s10工作时会遇到形形色色的问题,比如虚拟机需要与主机共享文件夹。那么如何进行设置呢?下面我与你分享具体步骤和方法。工具/材料Windows10操作系统启动Windows10操作系统,如图所示。点击任务栏"开始"按钮,弹出开... 查看详情

在dockerforwindows中运行gui程序(代码片段)

...ui-applications-inside-docker-containers上述参数的含义就是将Linux宿主机的XServer共享给Docker容器,还有一种方式就是映射宿主机XServer的.sock文件到容器中去。那么问题来了,在Windows或Mac这些没有X1 查看详情

Docker 容器上 Wildfly 中的 ActiveMQ 给出:检测到无效的“主机”值“0.0.0.0”

】Docker容器上Wildfly中的ActiveMQ给出:检测到无效的“主机”值“0.0.0.0”【英文标题】:ActiveMQwithinWildflyonaDockercontainergives:Invalid"host"value"0.0.0.0"detected【发布时间】:2017-06-0217:26:58【问题描述】:我在Docker容器中运... 查看详情

Request.ServerVariables["HTTP_HOST"].ToString() 是不是有可能返回与我在 url 栏中看到的主机不同的主机

】Request.ServerVariables["HTTP_HOST"].ToString()是不是有可能返回与我在url栏中看到的主机不同的主机【英文标题】:IsitpossiblethatRequest.ServerVariables["HTTP_HOST"].ToString()canreturnadifferenthostthanwhatIseeintheurlbarRequest.Se 查看详情

避免kafka客户端无法连接docker上运行的kafka,又名:docker如何添加hosts映射(代码片段)

...为客户端主机添加hosts映射,可是如果这个客户端运行在容器里呢?该怎么处理?解决方式解决思路有两种,第一种是容器使用主机网络,修改主机/etc/hosts;第二种是通过命令为容器添加hosts映射docker命令行如何做主机网络模式... 查看详情

docker容器网络

...器创建隔离的网络环境,容器具有完全独立的网络栈,与宿主机隔离。也可以使Docker容器共享主机或者其他容器的网络命名空间,基本可以满足开发者在各种场景下的需要。Docker支持4种网络模式:1)host模式,--net=host指定,不... 查看详情

求助,jetty服务器和tomcat服务器session共享问题

  试试bbosssesion共享方案,简单又实用,跨容器,采用mongodb存储会话信息,安全可靠,不会丢失session,支持属性增量更新,支持tomcat,jetty,  <ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"  memcachedNodes=... 查看详情

docker网络模式

docker网络模式host跟宿主机共享networknamespace(NN)container容器之间共享NNnone容器自己独立的NNbridge(默认)虚拟出一个网桥,会给容器分配相应的IP.还会创建出一对vethpair设备.一端在容器,另一端在宿主机. 查看详情

单点登录demo(代码片段)

...ockerrun--nameredis01-p6379:6379-dredis:3.2命令解析--nameredis01#设置容器名称-p6379:6379#映射主机6379到容器6379端口如果你自行安装redis也是可以,这里为了快速就直接使用docker。放代码,挺住。//首页@RequestMapping(value="/",method=RequestMethod... 查看详情

docker-数据卷以直接命令和dockerfile的形式添加,数据卷容器的概念及容器间继承实现

...据卷的直接命令和dockerfile的两种添加方式,并对主机和容器之间数据是否能共享进行验证;以及通过数据卷容器,使其他容器通过挂载父容器实现数据共享,并验证父容器删除后其他容器是否仍能进行数据共享。 数据卷添... 查看详情

docker同宿主机容器和不同宿主机容器之间怎么通信?

...立NetworkNameSpace。而是和主机共享一个NetworkNameSpace。使用宿主机的ip和端口,但是容器的系统,进程列表等还是和主机隔离。命令执行:#dockerrun-tid--net=host--namedocker_host1ubuntu-base:v3#dockerrun-tid--net=host--namedocker_host2ubuntu-base:v3#dockerexe... 查看详情

02ansible入门(代码片段)

Ansible入门定义主机清单[root@ansible-server~]#vim/etc/ansible/hosts[test]172.22.69.216ansible_ssh_user=‘root‘ansible_ssh_pass=‘eve@123‘[web]172.22.69.97ansible_ssh_user=‘root‘ansible_ssh_pass=‘eve@123‘在主机清单中未定义的主机,无法使用ansible进行管理。... 查看详情

docker-基础003-容器数据卷(代码片段)

...说"的Docker教学视频:https://www.bilibili.com/video/BV1og4y1q7M4容器数据卷作用:能够实现容器的数据持久化以及数据共享同步(包括容器间和容器与主机间)效果:同步后,能够直接在本机修改容器的配置文件等,不需要进入容器1.使用命令... 查看详情

为啥vbox下host-only无法设置

...式第一种,随便找一可用网络,那怕是用手机开的WIFI热点,共享出来,LINUX连接上去.然后在虚拟机网络配置连接方式选择BRIDGED方式.在XP里设置无线网卡的属性里的连接共享的两个勺都选择,另外一张网卡的地址理论上会自动改为192.168.... 查看详情

docker修改容器中的时间(代码片段)

Docker修改容器中的时间前言在公司开发时使用Docker创建数据库(SQLServer)的实例十分方便,还原数据库也只要设置好共享文件夹,在SQLServerManagementStudio的图形化界面中选择数据库的备份文件即可还原。但在处理与时间有关的业... 查看详情

虚拟机怎么和主机共享磁盘文件?

...2、然后,在弹出的虚拟机设置中点击选项标签栏目中的共享文件。3、接着,在共享文件的右侧点击添加的按钮。4、之后,在弹出的窗口中点击下一步的按钮。5、如图所示,点击浏览,在本地磁盘中选择和主机共享的磁盘文件... 查看详情