WSL2环境Docker部署Magento2.4.2-p1时/mnt/sdb磁盘占满问题排查
WSL2 Docker Compose搭建Magento 2.4.2-p1 MySQL容器磁盘占满问题排查与解决
问题背景
基于Docker Compose在Windows10 WSL2 Ubuntu系统下搭建Magento 2.4.2-p1运行环境时,出现MySQL容器磁盘空间不足的报错,但WSL2系统本身剩余硬盘空间非常充足。
问题现象
MySQL容器初始磁盘使用情况
进入MySQL容器执行磁盘查看命令,输出如下:
# df -h Filesystem Size Used Avail Use% Mounted on overlay 251G 23G 216G 10% / tmpfs 64M 0 64M 0% /dev tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup shm 4.0G 0 4.0G 0% /dev/shm /dev/sdd 251G 23G 216G 10% /etc/hosts /dev/sdb 251G 238G 1.2G 100% /etc/mysql/conf.d/my.cnf tmpfs 7.9G 0 7.9G 0% /proc/acpi tmpfs 7.9G 0 7.9G 0% /sys/firmware
可见/dev/sdb挂载路径使用率达100%,/mnt/sdb始终处于占满状态。当在docker-compose.yml中把/var/www/php/目录挂载到mysql-74容器时,该目录会被分配到/dev/sdb下,每次挂载都会触发sdb占满的问题。
挂载目录后的MySQL容器磁盘情况
# df -h Filesystem Size Used Avail Use% Mounted on overlay 251G 23G 216G 10% / tmpfs 64M 0 64M 0% /dev tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup shm 4.0G 0 4.0G 0% /dev/shm /dev/sdb 251G 238G 1.2G 100% /var/www/php /dev/sdd 251G 23G 216G 10% /etc/hosts tmpfs 7.9G 0 7.9G 0% /proc/acpi tmpfs 7.9G 0 7.9G 0% /sys/firmware
同环境PHP容器磁盘情况
对比同项目的php-74容器,磁盘空间非常充足:
$ df -h Filesystem Size Used Avail Use% Mounted on overlay 251G 23G 216G 10% / tmpfs 64M 0 64M 0% /dev tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup shm 64M 0 64M 0% /dev/shm /dev/sdd 251G 23G 216G 10% /etc/hosts tmpfs 7.9G 0 7.9G 0% /proc/acpi tmpfs 7.9G 0 7.9G 0% /sys/firmware
初始疑问
- 该问题的成因是什么?
- 有没有其他跨容器挂载目录的方案?(挂载目录仅为方便从本地文件夹导入、导出数据库)
初始docker-compose.yml配置
version: '3' # Services services: # PHP Service php-74: build: ./.docker/php container_name: php-74 #restart: always working_dir: /var/www/php environment: - COMPOSER_MEMORY_LIMIT=-1 volumes: - ./src:/var/www/php - ./.ssh:/root/.ssh links: - mysql-74 - redis-74 depends_on: - mysql-74 networks: - app-network-74 # MySQL Service mysql-74: shm_size: '4G' image: mysql:8.0.25 container_name: mysql-74 #restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: magento volumes: - ./.docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf:ro #- mysqldata:/var/lib/mysqlmys #- ./assets:/var/www/php #- ./assets:/home/magento ports: - "3306:3306" networks: - app-network-74 # PhpMyAdmin Service phpmyadmin-74: image: phpmyadmin/phpmyadmin:5-fpm container_name: phpmyadmin-74 #restart: always environment: PMA_HOST: mysql-74 volumes: - phpmyadmindata:/usr/src/phpmyadmin links: - mysql-74:db depends_on: - mysql-74 networks: - app-network-74 redis-74: image: redis:6 #restart: always container_name: redis-74 volumes: - redis-data:/data networks: - app-network-74 # Nginx Service nginx-74: image: nginx:1.18 container_name: nginx-74 #restart: always ports: - 80:80 volumes: - ./src:/var/www/php:ro - ./.docker/nginx/conf.d:/etc/nginx/conf.d:ro - phpmyadmindata:/usr/src/phpmyadmin depends_on: - php-74 - phpmyadmin-74 networks: - app-network-74 elasticsearch-74: image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3 container_name: elasticsearch-74 ports: - "9200:9200" - "9300:9300" networks: - app-network-74 environment: - "discovery.type=single-node" rabbitmq-74: image: rabbitmq:3.8-management container_name: rabbitmq-74 ports: - "15672:15672" - "5672:5672" volumes: - rabbitmqdata:/var/lib/rabbitmq networks: - app-network-74 # Volumes volumes: mysqldata: phpmyadmindata: redis-data: external: false elasticsearch: rabbitmqdata: #Docker Networks networks: app-network-74: driver: bridge
进一步排查
查看WSL2 Ubuntu系统本身的磁盘占用,输出如下:
magento@PC:~/php74$ df -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/sdb 257007 242729 1155 100% / tmpfs 8006 401 7606 6% /mnt/wsl tools 976116 470182 505935 49% /init none 8004 0 8004 0% /dev none 8006 1 8006 1% /run none 8006 0 8006 0% /run/lock none 8006 0 8006 0% /run/shm none 8006 0 8006 0% /run/user tmpfs 8006 0 8006 0% /sys/fs/cgroup C:\ 976116 470182 505935 49% /mnt/c D:\ 476295 1535 474761 1% /mnt/d /dev/sdd 257007 23347 220536 10% /mnt/wsl/docker-desktop-data/isocache none 8006 1 8006 1% /mnt/wsl/docker-desktop/shared-sockets/host-services /dev/sdc 257007 132 243752 1% /mnt/wsl/docker-desktop/docker-desktop-proxy /dev/loop0 396 396 0 100% /mnt/wsl/docker-desktop/cli-tools
确认WSL2根分区/dev/sdb本身已经100%占满,排除容器挂载逻辑异常的问题。
最终解决
问题根源
Magento 2.4.2-p1的CSP(内容安全策略)模块存在缺陷,会向缓存写入大量冗余数据,不管使用Redis缓存还是文件缓存都会快速占满磁盘空间。
修复方案
执行以下命令禁用CSP模块即可解决磁盘占满问题:
php bin/magento module:disable Magento_Csp
内容的提问来源于stack exchange,提问作者Kalvin Klien
相关产品推荐
相关产品推荐

