请教一个 docker-compose 挂载文件的奇怪问题

BIAOXYZ · 2024-7-15 14:45:58 · 158 次点击
有个老项目环境(涉及内部好几个代码仓库)不好搭,大家都是用 docker-compose 启动,然后挂载宿主机的文件到容器里。我遇到了一个奇怪的问题,我的 docker-compose.yml 里某个容器的挂载相关配置是这么写的:

```
    volumes:
      # - ${REPO_PATH}/managers:/home/tiger/managers
      - ${REPO_PATH}/managers/task_manager.py:/home/tiger/managers/task_manager.py
      - ${REPO_PATH}/managers/user_manager.py:/home/tiger/managers/user_manager.py
```

结果 task_manager.py 在宿主机修改就能同步进去容器里,user_manager.py 在宿主机修改就死活不能同步进去。问了 chatgpt ,给的方法都试了也不行。容器都删过一遍了,所有的 volume 都清空过了。再试也还是不行。

**更神奇的是,我就算把 task_manager.py 那一行注释掉,task_manager.py 的修改照样能同步——仅从这一点看是不是哪里还有缓存之类的没清理?**

但是我 docker-compose config 看过,这个命令的结果是符合预期的。所以真的没招了,请大家帮忙看看,感谢!!!
举报· 158 次点击
登录 注册 站外分享
7 条回复  
shineshane 小成 2024-7-15 15:03:33
task_manager.py 和 user_manager.py 的权限完全一致么?
yinmin 小成 2024-7-15 15:17:40
大概率是你修改的 docker-compose.yml 不对应你操作的容器。你把 docker-compose.yml down 下来,然后再试试容器还在不。
fitme 小成 2024-7-15 15:21:02
docker 挂载文件通过 vim 这种工具修改后 inode 变了,所以你看到的文件名一样,但已经不是同一个文件了。所以你重启重新挂载就好了
cheng6563 小成 2024-7-15 15:21:03
dockerd 如果被 selinux 限制的话也会出现奇怪的挂载问题,检查下吧。最常见的原因就是用 ubuntu 的 snap 装了 docker
newaccount 小成 2024-7-15 15:33:12
常见的坑,使用 volume 挂载的时候,请挂载文件夹而不是文件,否则 inode 一变,各种想不通的问题就来了
zljklang 小成 2024-7-15 17:22:21
${REPO_PATH}/managers/:/home/tiger/managers/ 直接映射目录试试
cosette 小成 2024-7-15 23:06:20
不管是挂载文件还是文件夹,在宿主机上修改文件后,最好 docker restart 一下,如果是修改了 docker-compose.yml 或者相关的.env 文件的内容,则只需要 docker compose up -d 就行了。
返回顶部