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文件
========================================
转载请保留此段声明,且在文章页面明显位置给出原文链接,谢谢!
==============================================================================
^_^ 如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,您的“推荐”将是我最大的写作动力 ^_^
==============================================================================
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构