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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 10:03:02