dockerHosts文件无法外面加载

简介: dockerHosts文件无法外面加载

机器环境

本实践将在 Ubuntu 22.04.3LTS 系统上进行安装测试
docker 版本Docker Engine - Community 24.0.6 ,原则上docker版本无影响

背景

因项目需求,需要再docker容器里面添加额外的hosts文件内容,想在通过 -v 挂载hosts文件,但是发现docker容器里面无法加载外部的hosts文件

操作过程记录

  • 运行容器脚本

    docker run -d -p 8088:80 -p 8081:8081 
    -v /root/deploy/nginx/hosts:/ect/hosts 
    -v /root/deploy/nginx/nginx.conf:/etc/nginx/nginx.conf 
    -v /root/deploy/nginx/default.conf:/etc/nginx/conf.d/default.conf 
    --restart=always --name nginx-example nginx:1.23.0
    
  • 现象1:上 面 /ect/hosts 无法被外面覆盖 , 当前docker机制为自动生成和维护

/var/lib/docker/containers/208b5870ad6889327a29e4ced312a66c377c885188303706a682793f72425125/hosts 文件为容器内的hosts文件的物理位置
通过 docker inspect nginx-example 获取到
```bash
vim /var/lib/docker/containers/208b5870ad6889327a29e4ced312a66c377c885188303706a682793f72425125/hosts

修改也无效,且重启后

cat /var/lib/docker/containers/208b5870ad6889327a29e4ced312a66c377c885188303706a682793f72425125/hosts

重新变回容器文件

```

  • 现象2:

    etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf 两个文件, 在宿主机更改,不重启容器容器无法感知到,重启后可以感知到

  • 现象3:

    在容器里面更改上述两个文件,宿主机可以感知到

  • 现象4:家目录,如 home、xx , 现象同3

分析

现象3,现象4 这是由于linux系统文件挂载机制导致的。可以通过挂在目录的形式来实现
docker挂载文件时,并不是挂载了某个文件的路径,而是挂载了对应的文件,即挂载了linux指定的 inode 文件。
当使用vim之类的编辑器进行保存时,它不是直接保存文件,而是采用了备份、替换的策略,就是编辑时,是创建一个新的文件,在保存的时候,把备份文件替换源文件,这个时候文件的 inode 就发生了变化,而原来 inode 对应的文件其实并没有修改,也就是容器内的文件没有变化。当重启容器的时候,会挂载新的 inode 文件,所以容器内的文件没有变化。

此路不同,就像其他路径

脚本修改完配置文件后,重启容器 docker restart nginx-example

目录
相关文章
|
运维 Kubernetes Nacos
nacos常见问题之集成nacos时 端口9848报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
12月前
|
人工智能 供应链 监控
数字化转型具体应该从哪里入手?——生成式AI时代的战略行动框架
本文探讨生成式AI技术对数字化转型的深远影响,从战略认知、技术赋能、组织能力三个维度构建转型框架。强调需突破传统技术工具论,将AI视为战略伙伴;从数据驱动转向知识进化;由组织变革拓展至生态重构。同时提出具体实施路径,包括场景优先级排序、人机协作设计及技术债务管理,并结合培生认证项目阐述其在能力基准建立、战略合作与创新生态接入的战略价值,助力企业实现持续进化与价值创造的本质回归。
|
Java 开发者
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
477 0
|
设计模式 数据可视化 测试技术
实践中的面向对象的例子
【7月更文挑战第1天】本文介绍面向对象编程注重代码的可理解性、重用和维护。例如,设计一个显示时间、温度等的设备,用户无需关心内部工作,这就是封装;如果需要多个设备,可通过多态创建不同实例;而继承则允许共享通用功能,如所有时钟都继承自计时器基类。
621 0
实践中的面向对象的例子
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
网络协议 安全 Linux
Linux 防火墙解锁规则与 `firewall-cmd` 教程
【8月更文挑战第20天】
1718 0
|
运维 Kubernetes 监控
kubernetes 安装cilium
Cilium是一个开源软件,用于透明地提供和保护使用Kubernetes,Docker和Mesos等Linux容器管理平台部署的应用程序服务之间的网络和API连接。 Cilium基于一种名为BPF的新Linux内核技术,它可以在Linux内部动态插入强大的安全性,可见性和网络控制逻辑。 除了提供传统的网络级安全性之外,BPF的灵活性还可以在API和进程级别上实现安全性,以保护容器或容器内的通信。由于BPF在Linux内核中运行,因此可以应用和更新Cilium安全策略,而无需对应用程序代码或容器配置进行任何更改。
1249 1
|
监控 Devops jenkins
DevOps实践:构建自动化CI/CD流水线
【8月更文挑战第28天】本文深入探讨了DevOps文化下,如何通过构建自动化的持续集成和持续部署(CI/CD)流水线来提高软件开发的效率和质量。文章不仅分享了构建流水线的步骤,而且提供了实际的代码示例,旨在帮助读者理解并实现自己的自动化流程。
854 0
|
程序员 Windows
程序员必备技能:一键创建windows 服务
该内容是关于在Windows上创建服务的教程。通过一个BAT脚本示例,用户可以将程序设置为开机启动或持续运行的服务。脚本设置了服务名称、显示名和描述,并指定了程序路径和参数。将代码保存为.bat文件,以管理员权限运行,即可创建服务。之后在Windows服务管理中找到并启动该服务。
555 4
|
Java 开发工具 计算机视觉
Java使用OpenCV3.2实现视频读取与播放
Java使用OpenCV3.2实现视频读取与播放
352 0