问题描述
在使用 Docker for Mac 时遇到了一个文件同步延迟的问题。尽管已经了解到 Docker for Mac 存在文件同步性能问题,但现在遇到的问题与之前了解到的慢读取访问问题不同。具体表现为:在主机上对文件进行更新后,更新在运行的容器中的文件可能需要10秒以上才能同步更新。
以下是用户提供的相关信息:
– Docker Compose 文件如下所示:
version: '2'
services:
ps-cms:
image: [obfuscated]
container_name: ps-cms
mem_limit: 2048M
ports:
- "9080:80"
- "9443:443"
volumes:
- .:/var/www/html/site:cached
- ./xdebug.ini:/etc/php/conf.d/docker-php-ext-xdebug.ini
environment:
- MYSQL_HOST=ps-db
networks:
- connector
extra_hosts:
- "mysite.localhost:127.0.0.1"
ps-db:
image: mysql:5.6
container_name: ps-db
mem_limit: 512M
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
ports:
- 33006:3306
networks:
- connector
networks:
connector:
- 软件版本信息:
- Docker Engine: 18.03.1-ce
- Docker Compose: 1.21.1
- Docker Machine: 0.14.0
- PHP Storm: 2018.1
- 在 Docker for Mac 偏好设置的 “文件共享” 中,只添加了一个项目文件夹,以尝试提升性能。
用户希望了解可能导致这种同步延迟的原因以及解决方法。
解决方案
注意: 以下解决方案基于用户提供的信息和最佳答案的建议。如有版本差异或操作风险,请在执行前进行备份或谨慎操作。
调整 PHP Opcache 设置
根据用户提供的最佳答案,该问题可能与 Docker 镜像中 PHP 的 Opcache 设置有关。Opcache 是 PHP 的一个缓存模块,用于缓存 PHP 脚本以提高性能。问题可能是 Opcache 的重新验证频率设置过长,导致文件更新在容器中的同步延迟。
以下是解决方案的步骤:
- 查找并编辑 Docker 镜像中 PHP 的 Opcache 配置文件(可能是
xdebug.ini
或其他相关文件)。 - 修改 Opcache 的
opcache.revalidate_freq
设置,将其从 60 秒(默认值)调整为较小的值,例如 2 秒。 - 保存配置文件并重新构建 Docker 镜像。
这样修改后,PHP 的 Opcache 将更频繁地检查文件的更新,从而减少同步延迟。然而,需要注意的是,这样做可能会带来性能上的一些损失。
用户可以参考以下链接获取更多信息:https://drupal.stackexchange.com/questions/253111/delay-in-code-changes-on-custom-pages-in-drupal-8-in-a-docker-environment
考虑使用 docker-compose 版本 3
在问题的评论中,有用户建议尝试使用 docker-compose
的版本 3。这可能是因为版本 3 可能有一些更新和改进,可能会对文件同步性能产生积极影响。用户可以尝试升级 docker-compose
到版本 3 并重新测试文件同步延迟问题。
总结
通过调整 PHP Opcache 设置和考虑使用 docker-compose
版本 3,用户可能能够解决 Docker for Mac 中文件同步延迟的问题。但需要注意,这些操作可能会带来性能上的一些权衡。用户可以根据自己的需求和性能要求来选择合适的解决方案。