为何不推选Docker文件挂载?

发布日期:2022-08-07 18:22    点击次数:125

来日诰日群里小搭档发了一个疑问,它经由过程docker启动了个nginx,nginx的一些相干设置文件都是经由过程文件的要领举行晖映的,疑问的点在于,在宿主机上编削了文件,为何对应晖映到容器内里的文件内容没有改变?

话不多说,起个容器看

docker run --name nginx -p 8082:80 -v /opt/nginx/nginx.conf:/etc/nginx.conf -d nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx a2abf6c4d29d: Pull complete a9edb18cadd1: Pull complete 589b7251471a: Pull complete 186b1aaa4aa6: Pull complete b4df32aa5a72: Pull complete a0bcbecc962e: Pull complete Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 Status: Downloaded newer image for nginx:latest 3d669ab21cfc6845f8f7105233215c9ab9002ddd06af1132fba257e14f93121e 

我这里间接晖映了个nginx的主设置文件,别管目录对纰谬,只是验证文件编削

尔后此时的文件内容该当是分歧的,今朝间接编削宿主机上的/opt/nginx/nginx.conf文件,首行加一个注释

生活生涯后,进容器,看下容器内的nginx.conf文件内容,也可以间接执行敕令查察

进入容器 docker exec -it 3d /bin/bash 查察文件结尾 head /etc/nginx.conf 或许间接在宿主机查察 docker exec 3d cat /etc/nginx.conf 

可以或许看到,文件内容未改变

这是为何呢?

这个成就,和Linux文件的inode有纠葛

第一次启动容器的岁月,看下两个文件的inode

宿主机

容器

可以或许看到是同一个inode,也就是同一个文件,宿主机编削了文件内容后,再对比

宿主机

容器

两个就不是一个文件,此时想要容器内文件生效,需求重启容器,成功案例CASE从头加载新的文件

再看下目录晖映的环境,照旧启动个容器

docker run --name nginx -p 8082:80 -v /opt/nginx:/opt/ -d nginx 537fc0c513d3bb83bb78d4f8333ede6a8a9d53070108ab55be5a8b9f2347ac9c 

这次用目录挂载,外埠/opt/nginx挂载到容器/opt/上面 ,当前重复上面的操作,查察inode,编削文件,对比inode

可以或许看到,目录挂载是没有成就的,容器内文件随宿主机文件实时改变的

为何目录可以或许呢?理论上就是那句经典,Linux下,通通皆文件,目录也是一种不凡的文件,理论上它也是有自身的inode,挂载目录的话,它着实是将容器内目录的inode指向到了宿主机的目录

所以目录内文件的改变,会实时改变,而文件挂载的话,理论容器内指向的inode照旧原来的,而今朝的文件理论上已经不是该inode了

本文转载自微信群众号「运维研习社」,可以或许经由过程下列二维码关注。转载本文请联络运维研习社群众号。

 



相关资讯