docker挂载单文件问题

摘要:
对于Docker中的文件夹装载成功,但单个文件装载不起作用的问题,因为在使用vim修改Docker vmount时有一种机制可以捕获它:当使用-vmount文件时,Docker会记录文件的inode并使用inode跟踪它。使用vim编辑文件后,文件的inode会发生更改。也就是说,默认值。当DockerRun运行时,conf文件不是默认文件。conf文件不会在容器中更改。同时,问题的开头使用sed-i修改,这也将更改inode。sed-i的机制是创建一个新的临时文件,并在修改后重命名。

关于docker中文件夹挂载成功 但是单文件挂载却没有生效的问题

因为用vim修改这里会有一个坑

docker -v mount 的机制:
-v mount 文件(或文件夹)时,docker 记录的是该文件的 inode,并用 inode 追踪。当用 vim 编辑了文件后,这个文件的 inode 就变了,也就是说这个 default.conf 文件已经不是运行 docker run 时的那个 default.conf 文件了,容器中自然也就没了新的改动。 同时该 issue 的 opener 使用的是 sed -i 修改,也会使 inode 发生变化,sed -i 的机制是创建一个新的临时文件,修改完后在重命名。对此,官方的建议是挂载文件夹,而不是文件。
https://github.com/moby/moby/issues/6011

上面这段参考:https://www.dazhuanlan.com/2020/01/02/5e0d7cfd57df8/

经测试发现,我挂载单文件的nginx的container,没重启之前修改挂载的单文件没有生效,但重启之后修改的配置文件确实会更新,对于nginx来说配置更新本身就需要重启,所以挂载文件其实也可以。但对于那些需要修改单文件但又想不重启container就可以实现更新的情况可以考虑挂载文件夹。我这里改为挂载文件夹。

//这里是挂载单文件,有坑,宿主机改配置后容器中配置没有修改,后面是挂载目录方式
root@Colin:~/web2# docker run --name web2 -d -p 80:80 --net host -v $(pwd)/config/html:/usr/share/nginx/html -v $(pwd)/config/conf/nginx.conf:/etc/nginx/nginx.conf -v $(pwd)/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v $(pwd)/config/logs:/var/log/nginx fansolomon/my-nginx

//先将文件从web2 container(我之前运行的一个nginx容器)相关配置文件copy到本地机config目录下,html目录也是同理,还有需要新建logs目录
root@Colin:~/web3# docker cp web2:/etc/nginx config

//完成copy后目录如下
root@Colin:~/web3/config# ls
html  logs  nginx
root@Colin:~/web3/config/nginx# ls
conf  conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf

//然后重新建立一个web3 container,将单文件挂载改为目录挂载!
root@Colin:~/web3# docker run --name web3 -d -p 80:80 --net host -v $(pwd)/config/html:/usr/share/nginx/html -v $(pwd)/config/nginx:/etc/nginx -v $(pwd)/config/logs:/var/log/nginx fansolomon/my-nginx

//再修改宿主机web3文件夹中的config中配置,可以看到容器中的配置跟着更新了,成功
//进入/usr/sbin/后进行reload重新加载配置文件 可以看到修改已经生效

免责声明:文章转载自《docker挂载单文件问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python模块介绍- binascii:二进制和ASCII互转以及其他进制转换Windows和Ubuntu双系统时间相差8个小时的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CentOS+Nginx+PHP+Mysql 服务器配置

[利用yum命令配置、升级所需程序库] # sudo -s# LANG=C# yum -y install gcc gcc-c++ autoconf #yum -y install make //如果不安装make,那么cmake的时候会出问题 # yum -y install cmake # yum -y install bison 接下来最好手动编译...

docker安装启动es

docker安装es和kibana docker pull elasticsearch:7.4.2 docker pull kibana:7.4.2 创建映射文件夹(并写入配置) mkdir -p /kaka-data/elasticsearch/config mkdir -p /kaka-data/elasticsearch/data 代表es可以被远程...

使用Dockerfile制作镜像

组成部分 基础镜像信息 FROM 维护者信息 MAINTAINER、LABEL 镜像操作指令 RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER等 容器启动时执行指令 CMD、ENTRYPOINT 1、MAINTAINER (docker1.7以后的版本已被LABEL替代,但仍兼容此字段) 格式: MAINTAINER &...

linux Nginx 日志脚本

这篇文章主要介绍了nginx日志切割脚本、nginx日志分析脚本等,需要的朋友可以参考下。 参考自:http://www.jbxue.com/article/13927.html任务计划 crontab -l 1 15 * * * /home/dongnan/sh/split.sh >> /home/dongnan/sh/cron.log 2&...

nginx -s reload "/alidata/server/nginx/logs/nginx.pid" failed

[root@snoopy 15:36:58 vhosts]# nginx -s reload nginx: [error] open() "/alidata/server/nginx/logs/nginx.pid" failed (2: No such file or directory) 修改完nginx的配置后,想重启下nginx,结果提示这个错误,服...

在群晖上安装docker和docker-nginx

群晖自带的web服务中的nginx自定义程度太低,直接命令行修改配置文件会被系统还原覆盖。安装docker版nginx即可完美解决。 安装docker 直接群晖套件中心里面安装。 安装docker-nginx 在群晖web界面安装 1、群晖docker里下载nginx,选择latest。 2、下载完成后双击可进行配置创建容器,配置完成后点击启动即可...