dockerHosts文件无法外面加载

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 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

目录
相关文章
|
机器学习/深度学习 Python
加载变量
在机器学习中,加载变量通常指从数据集中提取特征变量和目标变量,以便在后续建模和训练过程中使用。特征变量是描述数据样本的属性或特征,而目标变量则是用于评估模型性能的变量。 以下是一个简单的示例,说明如何在 Python 中加载变量:
135 1
|
JavaScript 前端开发
脚本可放置与外部文件中
脚本可放置与外部文件中
62 1
|
Python
pygame包打开的图片要默认放在什么地方?
pygame包打开的图片要默认放在什么地方?
462 0
pygame包打开的图片要默认放在什么地方?
|
消息中间件 存储 安全
类是如何加载的?
类是如何加载的?
123 0
一个简单的页面加载管理类(包含加载中,加载失败,数据为空,加载成功)(下)
在最近公布的比赛框架中,发现了页面加载管理类,觉得挺有用的,所以做个简单的笔记。
122 0
一个简单的页面加载管理类(包含加载中,加载失败,数据为空,加载成功)(下)
一个简单的页面加载管理类(包含加载中,加载失败,数据为空,加载成功)(上)
在最近公布的比赛框架中,发现了页面加载管理类,觉得挺有用的,所以做个简单的笔记。
110 0
一个简单的页面加载管理类(包含加载中,加载失败,数据为空,加载成功)(上)
|
缓存 JavaScript 开发者
require 函数加载模块原理(被加载的模块会先执行一次)|学习笔记
快速学习 require 函数加载模块原理(被加载的模块会先执行一次)
require 函数加载模块原理(被加载的模块会先执行一次)|学习笔记
起个服务把静态html文件放在手机上访问
起个服务把静态html文件放在手机上访问
181 0
起个服务把静态html文件放在手机上访问
c#程序片段,替换所有同名文件
class Program { static void Main(string[] args) { try { ...
875 0