前言

  公司一直在用传统的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文件

Docker容器加载宿主机的hosts解析的更多相关文章

  1. Docker容器内连接宿主机即CentOS的Mysql服务器

    docker的宿主机是虚拟机下的CentOS 博主最近遇到一种情况,从服务器拷贝了一份数据库在宿主机Mysql服务器上,想要用本地的数据库测试自己的代码正确性,但是项目程序都是靠docker一键部署的 ...

  2. 解决Docker容器内访问宿主机MySQL数据库服务器的问题

    懒得描述太多,总归是解决了问题,方法简要记录如下,虽然简要,但是完整,一来纪念处理该问题耗费的大半天时间,二来本着共享精神帮助其他遇到该问题的哥们儿,当然这个方法并不一定能解决你们的问题,但是多少能提 ...

  3. docker 容器内部访问宿主机

    在宿主机执行: ifconfig 然后查看 docker0 的那个网卡的 ip 地址,比如我的是 172.18.0.1

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

    0.背景 有时候制作docker镜像生成容器时需要宿主机的hosts文件共享到容器中.首先想的是通过挂载的方式共享hosts文件,但是实践时发现根本行不通,hosts文件在/etc/目录下,如进行挂载 ...

  5. spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)转

    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...

  6. Spring之IOC容器加载初始化的方式

    引言 我们知道IOC容器时Spring的核心,可是如果我们要依赖IOC容器对我们的Bean进行管理,那么我们就需要告诉IOC容易他需要管理哪些Bean而且这些Bean有什么要求,这些工作就是通过通过配 ...

  7. 动态加载机Servlet容器加载器

    动态加载是Servlet 3.0中的新特性,它可以实现在 不重启Web应用的情况下加载新的Web对象(Servlet. Filter.Listener).Servlet容器加载器也是Servlet 3 ...

  8. 动态加载及Servlet容器加载

    动态加载 动态加载是 Servlet 3.0 中的新特性,它可以实现在不重启 Web 应用的情况下加载新的 Web 对象(Servlet.Filter.Listener). 为了实现动态加载的第一种方 ...

  9. spring boot容器加载完后执行特定操作

    有时候我们需要在spring boot容器启动并加载完后,开一些线程或者一些程序来干某些事情.这时候我们需要配置ContextRefreshedEvent事件来实现我们要做的事情 1.Applicat ...

随机推荐

  1. js 代码几种方式

    var nameSpace={ //public } (function(){ //private })(); var module=(function(){ //private return { / ...

  2. Unity3d学习日记(六)

      今天在研究怎么在unity中将image上的图片保存到本地,主要参考下面两个链接:Unity Texture2D缩放.UNITY存储图片到本地   结合上述两个链接,我写了如下代码来将缩放后或者改 ...

  3. mac下面安装redis

    本文只记录了在homebrew下面安装redis的过程,过程比较简单,作为自己以后翻阅用吧, 首先安装homebrew,打开终端,在终端下面允许下面的命令(不要用root用户): /usr/bin/r ...

  4. pygame学习笔记(4)——声音

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi pygame.mixer是一个用来处理声音的模块,其含义为“混音器”.游戏中对声音的处理一般包括制造声音和播放声音 ...

  5. ini_set的权限大于error_reporting

    在用php做网站开发的时候 , 为防止用户看到错误信息,而出现的不友好界面.故一般性会在php.ini里设置:display_errors = Off;不过在开发的时候,我们有时候需要打开错误信息.这 ...

  6. 内网内使用https 和 使用http 建立连接的速度对比

    文字版 使用https httpstat https://10.24.101.14/cwbase/web/Login.aspx --insecure Connected to HTTP/ OK Ser ...

  7. Eslint 配置及规则说明(报错)

    https://blog.csdn.net/violetjack0808/article/details/72620859 https://blog.csdn.net/hsl0530hsl/artic ...

  8. nowcoder 203J Graph Coloring I(dfs)

    题目链接 题目描述 修修在黑板上画了一些无向连通图,他发现他可以将这些图的结点用两种颜色染色,满足相邻点不同色. 澜澜不服气,在黑板上画了一个三个点的完全图.修修跟澜澜说,这个图我能找到一个简单奇环. ...

  9. Java变量初始化之后的默认值问题

    1) 局部变量初始化(局部变量:函数.语句中的变量,只在所属区域内有效)局部变量声明后,Java虚拟机不会自动给它初始化为默认值.因此对于局部变量,必须经过显示的初始化,才能使用它.如果使用一个没有被 ...

  10. Ubuntu终端命令--查看端口占用及关闭

    1.查看已连接的服务端口 (ESTABLISHED)     netstat-a 2.查看所有的服务端口(LISTEN,ESTABLISHED)     netstat-ap 3.查看指定端口,可以结 ...