
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
d3fk/mailman2是一个基于Debian 10 (buster-slim) 的轻量级Docker镜像(压缩后242Mb),集成mailman2、exim4邮件服务器和apache2 Web服务器,旨在提供稳定、便捷的邮件列表管理解决方案,支持通过Web界面创建和管理邮件列表。
Debian buster是仍提供mailman2软件包的最新Debian版本,本镜像利用这一特性,提供了包含邮件列表管理(mailman2)、邮件传输(exim4)和Web管理界面(apache2)的一体化容器,适合快速部署自用或组织级邮件列表服务。
推荐从Docker Hub拉取预构建镜像:
shdocker pull d3fk/mailman2
镜像标签
d3fk/mailman2:latest:自动构建(代码仓库更新或每周触发),包含最新安全修复和功能更新d3fk/mailman2:stable:基于稳定版本构建,代码冻结,适合生产环境Docker Hub仓库地址:https://hub.docker.com/r/d3fk/mailman2
通过环境变量自定义容器行为,常用变量如下:
| 变量名 | 描述 | 默认值 |
|---|---|---|
URL_HOST | Web界面访问域名(用于URL生成) | - |
EMAIL_HOST | 邮件列表域名(用于生成列表地址) | - |
MASTER_PASSWORD | 邮件列表管理员主密码 | "example" |
LIST_ADMIN | 列表管理员***地址(用于创建管理员账户) | - |
LIST_LANGUAGE_CODE | 默认语言代码 | "en"(英语) |
URL_ROOT | Web界面根路径(避免被爬虫识别),需以/结尾,空字符串表示根目录 | "lists/" |
URL_PATTERN | Web访问协议,可选"http"或"https" | "http" |
SSL_FROM_CONTAINER | 是否由容器提供HTTPS(启用mod_ssl并自动重定向80→443),字符串布尔值 | "false" |
SSL_SELFSIGNED | 当SSL_FROM_CONTAINER=true时,是否生成自签名证书(false则使用现有证书) | "false" |
ENABLE_SPF_CHECK | 是否启用SPF检查(防止邮件身份伪造),字符串布尔值 | "false" |
以下是基本部署命令,需根据实际DNS配置修改环境变量:
shdocker run --rm -d --name mailman \ --add-host mails.example.com:127.0.0.1 \ # 将EMAIL_HOST映射到本地 --hostname mails.example.com \ # 设置容器主机名(影响exim配置) -p 80:80 -p 25:25 -p 465:465 \ # 映射端口(根据需求调整) -e URL_HOST=lists.example.com \ # Web访问域名 -e EMAIL_HOST=mails.example.com \ # 邮件域名 -e LIST_ADMIN=admin@example.com \ # 管理员邮箱 -e MASTER_PASSWORD="your_secure_password" \ # 管理员主密码 d3fk/mailman2
部署后查看容器日志,获取DKIM公钥和DNS配置信息:
shdocker logs mailman
日志末尾会显示DKIM TXT记录,需添加到DNS解析以启用DKIM验证。
为确保邮件正常发送和接收,需配置以下DNS记录:
| 记录类型 | 名称 | 内容说明 |
|---|---|---|
| A | URL_HOST | 指向容器所在服务器IP,用于Web界面访问 |
| A | EMAIL_HOST | 若URL_HOST与EMAIL_HOST不同,需单独配置A记录指向服务器IP |
| PTR | 服务器IP | 反向解析至EMAIL_HOST,用于邮件服务器身份验证 |
| MX | 域名 | 优先级最高的MX记录指向EMAIL_HOST,声明其为邮件接收服务器 |
| TXT | default._domainkey.EMAIL_HOST | DKIM公钥记录(从容器日志获取) |
| TXT | 域名 | SPF记录,例如:v=spf1 mx -all(允许MX记录指定的服务器发送邮件) |
| TXT | _dmarc.域名 | DMARC记录,例如:v=DMARC1; p=quarantine; sp=quarantine; adkim=s; aspf=s |
数据持久化
容器默认定义以下卷用于持久化关键数据,可通过Docker命名卷或主机目录挂载实现数据持久化:
| 卷路径 | 用途说明 |
|---|---|
/var/log/mailman | mailman日志 |
/var/log/exim4 | exim4邮件服务器日志 |
/var/log/apache2 | apache2 Web服务器日志 |
/var/lib/mailman/archives | 邮件列表归档数据 |
/var/lib/mailman/lists | 邮件列表配置和成员数据 |
/etc/exim4/tls.d | DKIM证书和TLS配置 |
持久化示例(使用主机目录挂载):
shdocker run --rm -d --name mailman \ --add-host mails.example.com:127.0.0.1 \ --hostname mails.example.com \ -p 80:80 -p 443:443 -p 25:25 \ -e URL_HOST=lists.example.com \ -e EMAIL_HOST=mails.example.com \ -e LIST_ADMIN=admin@example.com \ -e MASTER_PASSWORD="secure_pw" \ -e URL_PATTERN="https" \ -e SSL_FROM_CONTAINER="true" \ -e SSL_SELFSIGNED="true" \ -v $(pwd)/mailman-lists:/var/lib/mailman/lists \ # 挂载邮件列表数据 -v $(pwd)/dkim-cert:/etc/exim4/tls.d \ # 挂载DKIM证书 d3fk/mailman2
HTTPS配置方案
容器支持三种HTTPS配置方式:
外部HTTPS终结(推荐)
URL_PATTERN="https" + SSL_FROM_CONTAINER="false",由反向代理/负载均衡器(如Nginx、Traefik)管理SSL证书,容器通过HTTP与代理通信。
容器自签名证书
URL_PATTERN="https" + SSL_FROM_CONTAINER="true" + SSL_SELFSIGNED="true",容器自动生成自签名证书(适合测试,生产环境不推荐)。
自定义SSL证书
URL_PATTERN="https" + SSL_FROM_CONTAINER="true" + SSL_SELFSIGNED="false",通过卷挂载自定义证书至容器:
sh-v /path/to/your/cert.pem:/etc/ssl/certs/ssl-cert-snakeoil.pem \ -v /path/to/your/key.pem:/etc/ssl/private/ssl-cert-snakeoil.key \
端口映射说明
容器暴露以下端口,可根据需求映射至主机:
| 容器端口 | 用途 | 建议映射场景 |
|---|---|---|
| 80 | HTTP Web界面 | 未启用HTTPS时使用 |
| 443 | HTTPS Web界面 | 启用容器HTTPS或自定义证书时 |
| 25 | SMTP(邮件接收) | 需开放至互联网以接收外部邮件 |
| 465 | SMTPS(TLS直连) | 用于客户端TLS加密发送邮件 |
| 587 | SMTPS(标准提交端口) | 替代465的标准加密邮件端口 |
Docker Compose
代码仓库提供compose.yaml模板,可通过环境变量文件(.env)配置参数:
yaml# compose.yaml示例 version: '3' services: mailman: image: d3fk/mailman2 container_name: mailman hostname: ${EMAIL_HOST} extra_hosts: - ${EMAIL_HOST}:127.0.0.1 ports: - "80:80" - "443:443" - "25:25" environment: - URL_HOST=${URL_HOST} - EMAIL_HOST=${EMAIL_HOST} - LIST_ADMIN=${LIST_ADMIN} - MASTER_PASSWORD=${MASTER_PASSWORD} - URL_PATTERN=https - SSL_FROM_CONTAINER=true - SSL_SELFSIGNED=false volumes: - ./lists:/var/lib/mailman/lists - ./dkim:/etc/exim4/tls.d - ./ssl-cert.pem:/etc/ssl/certs/ssl-cert-snakeoil.pem - ./ssl-key.pem:/etc/ssl/private/ssl-cert-snakeoil.key restart: unless-stopped
Kubernetes部署
代码仓库k8s目录提供Deployment、Service等资源模板,支持通过ConfigMap/Secret注入环境变量和证书,适合生产环境规模化部署。
--hostname影响exim4的primary_hostname配置,建议设为EMAIL_HOSTENABLE_SPF_CHECK=true时,确保容器能获取发件人真实IP(非代理IP)本项目基于https://github.com/Angatar/mailman2/blob/master/LICENSE%E5%BC%80%E6%BA%90%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






来自真实用户的反馈,见证轩辕镜像的优质服务