docker文件映射踩坑.md

在写一个Clash的配置转换服务的时候添加了一个FileWatch的功能,实时检测配置文件的更改并重新加载配置文件

在本机运行的时候好好的,封装成镜像之后在vps上通过Docker Compose挂载config.yml到容器内

version: '3'
services:
  subparser:
    image: cracktc/subparser
    ports:
      - 4447:4447
    volumes:
      - type: bind
        source: ./config.yml
        target: /app/config.yml

然后发现在宿主机上对config.yml的修改并没有生效

一开始没多想,以为是代码有问题,看到stackoverflow上有人遇到了相似的问题,以为是dotnetFileSystemWatcher的实现问题,遂转到了PhysicalFileProvider并使用轮询方式检测文件更改,中间写回调可谓是一波三折

心想这应该能解决了,一放vps上又瞎了qaq

然后忽然有了一个神奇的想法,直接exec进容器,一看配置文件压根没改,就很emmm

解决方法是挂载目录而不是单个文件,这样更改就能对容器可见啦~

# config.yml在config目录下
version: '3'
services:
  subparser:
    image: cracktc/subparser
    ports:
      - 4447:4447
    volumes:
      - type: bind
        source: ./config
        target: /app/config

或许原来的FileSystemWatcher是能用的qaq