有序集合

Blunt

Docker那些事

11
2024-12-11

docker挂载文件无法更新

现象

​ 1.docker挂载文件,修改后容器内文件无变化

​ 2.重启容器,容器内文件与外部挂载文件一致

原因

​ 挂载文件时,docker记录的是文件inode,而非文件路径。而vim修改时使用“保存,替换”方式修改文件,导致文件inode发生变化,从而导致修改文件后需要重启容器生效。

解决方案

​ 挂载文件夹而非文件,能有效避免这个问题

Docker日志管理

docker存日志主要有三种方式

  1. 程序直接写到stdout,stderr,交由docker log driver管理
  2. 程序写到文件,由自己管理日志
  3. 程序写到文件,并将文件软链接到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,配置即可生效。