如何使用Docker配置Maildev邮件持久化存储 解决重启后邮件丢失问题
问题根源
你的配置逻辑本身没有错误,失效的核心原因是容器内运行Maildev服务的用户没有挂载目录的写入权限,导致邮件无法落地到磁盘存储,默认存放在内存中,容器重启后数据自然清空。
解决方案
1. 修复宿主机挂载目录权限(Linux环境专属)
官方Maildev镜像默认使用UID、GID均为1000的maildev用户运行服务,Docker自动创建的挂载目录默认归属root用户,无写入权限时服务会自动将邮件存入内存。
在宿主机项目根目录执行以下命令修改目录权限:
sudo chown -R 1000:1000 ./var/data/maildev
如果是Windows/macOS部署环境,无需执行上述命令,只需要在Docker设置的文件共享配置中,开放挂载目录所在路径的读写权限即可。
2. 优化docker-compose.yml配置
修正冗余配置,明确指定运行用户避免权限漂移:
version: '3.8' services: maildev: hostname: maildev # 明确指定运行用户ID,和官方镜像默认用户权限匹配 user: "1000:1000" # 去掉冗余的bin/前缀,直接调用全局maildev命令 command: maildev --web 80 --smtp 25 --mail-directory /home/maildev/data volumes: - ./var/data/maildev:/home/maildev/data ports: - "1080:80" networks: - my-network # 如你已提前创建my-network外部网络,可删除以下配置改为external: true networks: my-network: driver: bridge
3. 验证配置生效
执行以下命令重启服务测试:
# 停止并删除原有Maildev容器 docker compose down # 重新启动服务 docker compose up -d
启动后发送1封测试邮件,再执行docker compose restart maildev,访问1080端口的Maildev管理页,即可看到重启前的邮件依然留存。
内容的提问来源于stack exchange,提问作者Hien Nguyen
相关产品推荐
相关产品推荐

