Docker修改hosts?这还不简单,打开vim直接敲就完事儿了!然而事与愿违,事情没有我们想的那么简单。在很多场景中,比如我们需要搭建一个集群,这时候容器要识别集群内的节点,就需要添加相应的host解析。这时就需要修改容器的hosts文件,下面我们将会看到在Docker中自动化实现修改hosts不是那么简单的事。

问题的由来

hosts文件其实并不是存储在Docker镜像中的,/etc/hosts, /etc/resolv.conf和/etc/hostname,是存在主机上的/var/lib/docker/containers/(docker_id)目录下,容器启动时是通过mount将这些文件挂载到容器内部的。因此如果在容器中修改这些文件,修改部分不会存在于容器的top layer,而是直接写入这3个文件中。容器重启后修改内容不存在的原因是Docker每次创建新容器时,会根据当前docker0下的所有节点的IP信息重新建立hosts文件。也就是说,你的修改会被Docker给自动覆盖掉。

解决办法

修改hosts一眼看上去是一件很容易的事,根据上面的分析其实不是那么简单的,如果一个分布式系统在数十个节点上,每次重新启动都要去修改hosts显得很麻烦,如何解决这一问题,目前有以下办法。

开启时加参数

开启容器时候添加参数—add-host machine:ip可以实现hosts修改,在容器中可以识别machine主机。缺点是很多个节点的话命令会很长,有点不舒服(当然,你可以写一个脚本了)。

进入容器修改

进入容器后可以用各种编辑器编辑修改hosts文件,这样是最简单粗暴的方式,缺点就是每次启动容器都要修改一次。

dnsmasq

在每个容器中开启dnsmasq开负责局域网内的容器节点主机名解析,但是这种方式在跨物理机的时候,好像不是很方便(具体情况还没有实践过,挖坑日后再填)。可以参考一下kiwenlau的工作

修改容器hosts查找目录

我们可以想办法让容器开启时候,不去找/etc/hosts文件,而是去找我们自己定义的hosts文件,下面是一个Dockerfile实例

1
2
3
4
5
6
7
FROM ubuntu:14.04
RUN cp /etc/hosts /tmp/hosts #路径长度最好保持一致
RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
RUN sed -i 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2
ENV LD_LIBRARY_PATH /lib-override
RUN echo "192.168.0.1 node1" >> /tmp/hosts #可以随意修改/tmp/hosts了
...

这样修改后,容器每次启动时就不去找/etc/hosts了,而是我们自己定义的/tmp/hosts,可以随心所欲在其中修改了

小结

以上问题可以用于跨主机部署分布式Docker集群,结合之前的跨物理机Docker网络互联,便可以实现快速高效部署分布式集群

原文链接:

https://wongxingjun.github.io

-更多文章-

Spring Cloud GateWay初体验

Kubernetes基础与架构

对业务系统的监控 No.118

Kubernetes对象模型

拜托!面试请不要再问我Spring Cloud底层原理

【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战

Docker 核心技术与实现原理

学习别跟我谈兴趣 No.88

条件注解 @ConditionalOnBean 的正确使用姿势

分布式事务的实现原理

条件注解 @ConditionalOnBean 的正确使用姿势

图解:什么是Raft算法?

-关注我-

Docker怎么修改hosts相关推荐

  1. Docker容器修改hosts文件重启不变

    Docker容器修改hosts文件重启不变 1./etc/hosts, /etc/resolv.conf和/etc/hostname容器中的这三个文件不存在于镜像,而是存在于于/var/lib/doc ...

  2. docker容器添加自定义hosts

    方案一 启动时增加hosts,参考自docker docs docker run -d --name test1 \--add-host test1.a:1.2.3.4 \local/test 方案二 ...

  3. 【docker设置host】docker镜像设置hosts

    docker中的host hosts文件其实并不是存储在Docker镜像中的,/etc/hosts, /etc/resolv.conf和/etc/hostname,是存在主机上的/var/lib/do ...

  4. linux hosts文件如何修改_如何修改hosts文件?让你简单方便快捷管理

    如何修改hosts文件?几种修改方法让你简单方便快捷,hosts 是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库&q ...

  5. 修改Hosts为何不生效,是DNS缓存?

    Update: 如果浏览器使用了代理工具,修改 Hosts 也不会生效.这里是因为,浏览器会优先考虑代理工具(如添加 pac 文件.SwitchySharp等)的代理,建议调试的时候先关闭这些代理. ...

  6. 如何修改hosts文件?

    step1: 在C:\Windows\System32\drivers\etc目录下复制一份hosts文件到桌面 step2: 然后在桌面修改你的hosts,保存下来可能是文本格式 step3: 将. ...

  7. 破解phpstorm2017.3.1版本并解决win10下修改hosts问题

    新入手一台新电脑,很多软件都要重新安装.终于舍弃了phpstorm2016,换到了2017版.这篇文章主要是破解phpstorm2017.3.1. 一.基本流程 1.下载phpstorm2017.3. ...

  8. 修改hosts文件使apache绑定域名指向本机

    这篇文章主要介绍了修改hosts文件,访问本机apache绑定的域名,大家参考使用吧 apache下绑定域名 方法如下: 1.找到apache安装目录下的httpd.conf并打开,在最后加上: 复制 ...

  9. hosts文件_电脑修改hosts文件屏蔽网站方法

    说起hosts文件我想有很多电脑用户都不会感到陌生,因为利用它我们可以屏蔽一些网站,但是有很多电脑用户都不知道电脑如何修改hosts文件屏蔽网站,那么电脑如何修改hosts文件屏蔽网站呢?下面为大家带 ...

最新文章

  1. php pdo blob,PHP / PDO / MySQL:插入MEDIUMBLOB存储坏数据
  2. 带有匹配滤波器的雷达信号调制和脉冲压缩技术的Matlab程序
  3. 链表的有序集合_JAVA
  4. liferay 如何在页面实现添加多个portlet
  5. 0 RabbitMQ概念
  6. 网站总结 和 相关控件 总结
  7. C语言实现可变参数列表的system接口:宏__VA_ARGS__
  8. 帝国cms文章内容tags关键词设置调用方法以及tags静态化
  9. 双刃剃须刀行业调研报告 - 市场现状分析与发展前景预测
  10. 语音 识别_语音识别_qq语音识别 - 云+社区 - 腾讯云
  11. 《Java并发编程实战》 第二章:线程安全性
  12. 【转】恢复默认vs2005
  13. Office 2010 Excel 多窗口同时单独打开多个文件设置教程
  14. startx 命令_通过startx从命令行启动KDE
  15. html 名人名言源代码,基于JQuery及AJAX实现名人名言随机生成器_咋地 _前端开发者...
  16. 校园IPTV数字电视教学直播系统方案-淮安生态文旅区实验小学
  17. python作业_python小作业
  18. Installation failed with message Failed to finalize session : INSTALL_FAILED_INVALID_APK:
  19. android 仿qq 通讯录,Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展[图文+源码]...
  20. excel表格多行空白,让空白行临近上方的数据自动填充到空白行

热门文章

  1. JS 实现可停顿的垂直滚动
  2. MongoDB 删除数据库
  3. BZOJ 3566: [SHOI2014]概率充电器
  4. Swift学习笔记-协议(Protocols)
  5. 老调重弹:插件式框架开发的一个简单应用
  6. 【青少年编程】【三级】青蛙捕虫
  7. 技术图文:03 结构型设计模式(上)
  8. 【MATLAB】符号数学计算(八):符号分析可视化
  9. Mendix 披露低代码方法论,解读真实技术趋势
  10. 百度携手同济大学,瞄准AI、智慧交通等核心科技领域攻关