Docker容器加载宿主机的hosts解析
前言
公司一直在用传统的tomcat下丢war包的架构体系,随着项目的增多、服务器数量的增多、需要为此花费很多时间在不同服务器的系统环境问题上。为了技术的与时俱进和工作的运维效率等方面,笔者引入docker容器部署方式,通过Gitlab+Jenkins+Harbor体系,通过Dockerfile生成自定义镜像并放置Harbor仓库,Jenkins加上自定义Shell脚本(实现拉镜像,启动容器,容器映射端口固定,自定义日志路径)等,基本实现了持续集成的自动化部署。在测试环境试用了一段时间,发现效果还不错,但近来却发现容器中应用有报错,根据报错信息定位到容器中hosts文件解析问题。
解决
于是乎,通过各种试验,找到了解决方案,即在docker容器启动时通过---add-host方式加载宿主机的解析到容器中,如下:
/usr/bin/docker run -d \
-p 8888:7001 \
-p 9999:37001 \
-v /webapps/health_record\.war:/usr/local/tomcat-7001/webapps/health_record\.war \
-v /logs/health_record:/usr/local/tomcat-7001/logs \
-v /logs/HC_logs/health_record:/usr/local/dir_samba \
$(cat /etc/hosts|awk -F ' ' '{if(NR>2){print "--add-host "$2":"$1}}') \
--name health_record8 \
172.21.97.152/tomcat/tomcat-de:4.0
说明
重点是标红内容,将hosts文件动态读取,拼接成--add-host所要的格式,NR>2是过滤掉/etc/hosts文件中头两行(不是我想要的内容)。
缺点
不能动态加载宿主机的hosts文件,如果宿主机的hosts文件发生变化,容器需要同步更新,必须删除容器重新生成即可。
完善
此为开启容器时加参数方式,也可用其他方式,如:
1)进入容器编辑hosts文件; # 临时解决
2)修改容器默认的解析文件(即自定义hosts文件); # 将容器变成启动后不去找/etc/hosts,而是找自定义的hosts文件
-------------------------------------------------------------
转载请保留此段声明,且在文章页面明显位置给出原文链接,谢谢!
------------------------------------------------------------------------------
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
------------------------------------------------------------------------------

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
这可能是把Docker的概念讲的最清楚的一篇文章
Docker 是世界领先的软件容器平台,本文主要来介绍下关于Docker的那些事儿,主要包含以下内容: 容器 什么是Docker? Docker思想、特点 Docker容器主要解决什么问题 容器 VS 虚拟机 Docker基本概念: 镜像(Image),容器(Container),仓库(Repository) 一 先从认识容器开始 1.1 什么是容器? 先来看看容器较为官方的解释 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立软件包,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。 再来看看容器较为通俗的解释 如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用...
- 下一篇
Docker如何修改默认网段
版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/83023499 我们在局域网中使用Docker,最常遇到的一个困惑,就是有时候跨网段结果出现网络不通。原因是因为Docker默认生成的网关和我们的局域网网段有时候是冲突的,比如在172.16网段的机器上部署Docker,结果生成的docker0网桥是172.17网段,那么就和真实环境中使用该网段的机器冲突了(即ping不通172.17网段的机器)。为了避免冲突,首先想到的是改网关,举例如下(以Centos为例): service docker stop # 删除docker防火墙过滤规则 iptables -t nat -F POSTROUTING # 删除docker默认网关配置 ip link set dev docker0 down ip addr del 172.17.0.1/16 dev docker0 # 增加新的docker网关配置 ip addr add 192.168.2.1/24 dev dock...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 2048小游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境