1 目录挂载和单个文件挂载
例如下面一个挂载实例, /var/run/license_unix_sock 是个文件,docker 容器通过该 socket 文件和主机上的进程进行通信, /var/www/html/ 是目录。
- "/var/run/license_unix_sock:/var/run/license_unix_sock"- "/var/www/html/:/var/www/html/"- "/etc/localtime:/etc/localtime"
现象:当运行在主机上的程序重启时候, /var/run/license_unix_sock 发生变化,但是在 docker 容器中挂载的文件并没有发生改变,仍然是旧文件。
原因:对bind mount 这种挂载方式来说,文件的改变会改变它的inode,但是容器内inode保持不变。
解决方案:修改为挂载目录。
相关案例:
https://github.com/docker/docker/issues/15793#issuecomment-135411504
https://serversforhackers.com/c/mounting-files-vs-directories
2 使用 docker swarm,容器莫名其妙重启
某些情况下,docker 容器全部重启,经过查看 docker 运行日志,发现下面报错:
Feb 26 11:43:16