关于docker挂载文件的生效问题的疑惑

探讨Docker中挂载文件修改为何有时不立即生效的原因。深入inode机制,揭示使用不同编辑器对文件修改的影响,及如何正确操作以避免此类问题。

docker直接修改挂载文件,理论上是可以直接反应在容器内部的,他们共享一个文件,为何在宿主机内修改无效呢,而你以为只有重启才会使修改生效?其实不是的。

如果直接用vi编辑宿主机文件,这是因为用vi编辑保存时会修改文件的inode,Linux系统内部不使用文件名,而是使用inode号码识别文件。对于系统来说文件名只是inode号码便于识别的别称

修改前:

root@rancher:/home/llx/test# stat  config.js 
  File: config.js
  Size: 215       	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 1577292     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     lcx)   Gid: ( 1000/     lcx)
Access: 2020-03-06 01:01:28.635119676 +0000
Modify: 2020-03-06 01:01:21.855586110 +0000
Change: 2020-03-06 01:01:21.855586110 +0000
 Birth: -

使用vi修改

 vi nginx.conf

修改后,可以发现Inode变了。

root@rancher:/home/llx/test# stat  config.js 
  File: config.js
  Size: 215       	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 1579271     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     lcx)   Gid: ( 1000/     lcx)
Access: 2020-03-06 01:23:28.188175929 +0000
Modify: 2020-03-06 01:23:28.188175929 +0000
Change: 2020-03-06 01:23:28.196175914 +0000
 Birth: -
root@rancher:/home/lcx/aimp.fornt# 

正确操作,使用cat不会更改inode

# cp config.js config2.js 
# vi config2.js
# cat config2.js > config.js

更多关于Inode阅读

个人站欢迎访问

Docker 中,当对 Nginx 配置文件进行挂载并修改后,需要重新加载 Nginx 配置使其生效。有以下几种常见方式: ### 使用 `docker exec` 命令 可以使用 `docker exec` 命令在运行的 Nginx 容器内执行 `nginx -s reload` 命令来重新加载配置。假设 Nginx 容器名为 `nginx`,命令如下: ```bash docker exec nginx nginx -s reload ``` 此命令会向正在运行的 Nginx 进程发送一个重新加载配置的信号,Nginx 会读取新的配置文件并应用更改,而不会中断正在处理的连接。 ### 在 Docker Compose 中使用 若使用 Docker Compose 部署 Nginx,可先停止并重新启动服务使配置生效。假设 `docker-compose.yml` 文件如下: ```yaml version: '3' services: nginx: image: nginx:latest container_name: nginx ports: - "80:80" volumes: - ~/nginx/conf.d:/etc/nginx/conf.d # 挂载自定义配置文件 - ~/nginx/logs:/var/log/nginx # 持久化日志 - ~/nginx/html:/usr/share/nginx/html # 挂载静态文件目录 restart: always ``` 可使用以下命令停止并重新启动服务: ```bash docker-compose down docker-compose up -d ``` `docker-compose down` 会停止并移除容器,`docker-compose up -d` 则会重新创建并启动容器,新的配置文件会在容器启动时被加载。 ### 示例 如果按照之前挂载配置文件的命令启动 Nginx 容器: ```bash docker run \ --name nginx \ -d -p 8008:80 \ -v /usr/docker/nginx/html:/usr/share/nginx/html \ -v /etc/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ -v /etc/docker/nginx/conf.d:/etc/nginx/conf.d \ nginx ``` 当修改 `/etc/docker/nginx/nginx.conf` 或 `/etc/docker/nginx/conf.d` 下的配置文件后,可使用以下命令使配置生效: ```bash docker exec nginx nginx -s reload ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值