You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose service挂载volume未实时同步宿主机文件变更问题排查

问题根因

你遇到的文件变更无法实时同步到容器的问题,和Docker挂载配置无关,是PHP运行缓存、框架缓存配置导致的,具体解决方法如下:

1. 修正PHP Opcache配置

你的Dockerfile中默认加载了生产环境的api-platform.prod.ini配置,生产环境下Opcache默认关闭了PHP文件变更校验,只会在服务启动时读取一次文件内容,因此修改宿主机代码后不会实时生效。
解决方案:
在docker-compose.yml的php服务的volumes节点下新增配置,用开发环境的ini覆盖生产配置:

volumes:
    - ./:/srv/api
    - ./docker/php/conf.d/api-platform.dev.ini:/usr/local/etc/php/conf.d/api-platform.ini

同时确保api-platform.dev.ini中存在以下Opcache开发配置:

opcache.enable=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.max_accelerated_files=10000
opcache.memory_consumption=128

2. 切换Symfony运行环境为开发模式

你的Dockerfile中默认设置了APP_ENV=prod,生产环境下Symfony会将路由、配置、模板等内容预编译为缓存文件,不会自动检测代码变更重新编译。
解决方案:
在docker-compose.yml的php服务下新增environment节点,切换为开发环境:

php:
    build:
        context: .
    env_file:
        - .env
    environment:
        - APP_ENV=dev
    ports:
        - "9000:9000"
    volumes:
        - ./:/srv/api
        - ./docker/php/conf.d/api-platform.dev.ini:/usr/local/etc/php/conf.d/api-platform.ini

额外优化建议

你当前docker-compose.yml中mysql服务的卷配置.data:/var/lib/mysql缺少相对路径标识,修改为./.data:/var/lib/mysql可保证数据库数据存储在当前项目目录下,方便管理。

修改完成后执行docker-compose up -d --build重启服务即可生效,后续修改宿主机代码就能实时同步到容器中。

内容的提问来源于stack exchange,提问作者KodeFor.Me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:36:02