解决 Docker for Mac 文件同步延迟的问题

84次阅读
没有评论

问题描述

在使用 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 的重新验证频率设置过长,导致文件更新在容器中的同步延迟。

以下是解决方案的步骤:

  1. 查找并编辑 Docker 镜像中 PHP 的 Opcache 配置文件(可能是 xdebug.ini 或其他相关文件)。
  2. 修改 Opcache 的 opcache.revalidate_freq 设置,将其从 60 秒(默认值)调整为较小的值,例如 2 秒。
  3. 保存配置文件并重新构建 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 中文件同步延迟的问题。但需要注意,这些操作可能会带来性能上的一些权衡。用户可以根据自己的需求和性能要求来选择合适的解决方案。

正文完