docker挂载文件无法更新
现象
1.docker挂载文件,修改后容器内文件无变化
2.重启容器,容器内文件与外部挂载文件一致
原因
挂载文件时,docker记录的是文件inode,而非文件路径。而vim修改时使用“保存,替换”方式修改文件,导致文件inode发生变化,从而导致修改文件后需要重启容器生效。
解决方案
挂载文件夹而非文件,能有效避免这个问题
Docker日志管理
docker存日志主要有三种方式
- 程序直接写到stdout,stderr,交由docker log driver管理
- 程序写到文件,由自己管理日志
- 程序写到文件,并将文件软链接到stdout,stderr
一般来说选择方式1或方式3的比较多,不推荐方式2.因为方式2会导致container越来越大,占用大量磁盘空间,还给对接ELK等日志管理系统造成困难。使用方式3的典型容器是nginx,我们可以从nginx Dockerfile看到以下内容:
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
docker log driver配置
打开/etc/docker/daemon.json文件,写入如下配置“
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
关闭所有容器并重启docker,配置即可生效。