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

155 天前
 BIAOXYZ

有个老项目环境(涉及内部好几个代码仓库)不好搭,大家都是用 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 看过,这个命令的结果是符合预期的。所以真的没招了,请大家帮忙看看,感谢!!!

1530 次点击
所在节点    Docker
26 条回复
fitme
155 天前
@BIAOXYZ 不是,你现在描述的我感觉不清晰,你是想解决在不重启容器的情况下,通过修改宿主机文件同步到容器里面? 还是说你在修改了宿主机文件后,down up 后(相当于容器重建)宿主机修改的位置容器还是没变?
yinmin
155 天前
如果不是生产环境,就安装 portainer 可视化管理 docker 。

docker run -d --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock:ro -p 9000:9000 -v portainer_data:/data portainer/portainer-ce:sts
BIAOXYZ
155 天前
@fitme 是后者。但是比较神奇的是我不管怎么改都不行。刚才我重启了一下虚拟机,然后按前面另一位 v 友的回答,只挂载目录,也就是
```
volumes:
- ${JCNC_REPO_PATH}/managers:/home/tiger/managers
# - ${JCNC_REPO_PATH}/managers/task_manager.py:/home/tiger/managers/task_manager.py
# - ${JCNC_REPO_PATH}/managers/user_manager.py:/home/tiger/managers/user_manager.py
```
这次就可以了,感谢~
BIAOXYZ
155 天前
@yinmin 好的,谢谢~这个之前简单试过,没深入,回头再试试。
zljklang
155 天前
${REPO_PATH}/managers/:/home/tiger/managers/ 直接映射目录试试
cosette
155 天前
不管是挂载文件还是文件夹,在宿主机上修改文件后,最好 docker restart 一下,如果是修改了 docker-compose.yml 或者相关的.env 文件的内容,则只需要 docker compose up -d 就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1057415

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX