
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
docker-postfix 是一个基于 Alpine Linux 的轻量级 Postfix 中继主机镜像,专为 Docker 容器环境设计。它允许在 Docker 云/ swarm 部署中集中管理出站邮件发送,支持直接发送邮件或通过公司主服务器中继邮件。
MYNETWORKS 限制允许发送邮件的网络范围ALLOWED_SENDER_DOMAINS 限制允许的发件人域名bashdocker run --rm --name postfix -e "ALLOWED_SENDER_DOMAINS=example.com" -p 1587:587 boky/postfix
启动后,可使用 localhost:1587 作为 SMTP 服务器地址发送邮件。注意:需确保 example.com 域名已正确配置 SPF 记录(参见 openspf),否则邮件可能被标记为垃圾邮件。
重要:镜像默认使用提交端口(587),不暴露端口 25(因常被 ISP 封锁或被其他服务占用)。
环境变量列表
| 环境变量 | 描述 |
|---|---|
HOSTNAME | Postfix 服务器标识主机名(默认使用 Docker 容器 ID) |
RELAYHOST | 中继主机地址(格式:host 或 host:port 或 [ipv6]:port) |
RELAYHOST_USERNAME | 中继主机认证用户名(可选) |
RELAYHOST_PASSWORD | 中继主机认证密码(可选) |
MYNETWORKS | 允许发送邮件的网络范围(默认:127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16) |
ALLOWED_SENDER_DOMAINS | 允许的发件人域名(空格分隔多个域名,必填,除非设置 ALLOW_EMPTY_SENDER_DOMAINS) |
ALLOW_EMPTY_SENDER_DOMAINS | 允许空发件人域名(设置为非空值如 "true" 时,ALLOWED_SENDER_DOMAINS 可省略) |
MASQUERADED_DOMAINS | 地址伪装域名(重写发件人地址,如 user@sub.example.com → user@example.com) |
RELAYHOST_TLS_LEVEL | 中继主机 TLS 安全级别(默认:may,详见 Postfix 文档) |
MESSAGE_SIZE_LIMIT | 最大邮件大小(字节,默认 0 表示无限制) |
INBOUND_DEBUGGING | 启用来自 MYNETWORKS 的连接调试(设置为非空值如 "1" 启用) |
SMTP_HEADER_CHECKS | SMTP 头检查配置(格式:type:path,设置为 "1" 时使用默认配置) |
详细配置说明
HOSTNAME
设置 Postfix 服务器标识主机名,默认使用容器 ID(如 f73792d540a5)。建议显式设置以方便日志追踪:
bashdocker run --rm --name postfix -e HOSTNAME=postfix-docker -e "ALLOWED_SENDER_DOMAINS=example.com" -p 1587:587 boky/postfix
RELAYHOST, RELAYHOST_USERNAME, RELAYHOST_PASSWORD
配置中继主机,用于通过外部服务器发送邮件(如公司邮件服务器或第三方 SMTP 服务):
基本中继(默认端口 25):
bashdocker run --rm --name postfix -e "RELAYHOST=192.168.115.215" -e "ALLOWED_SENDER_DOMAINS=example.com" -p 1587:587 boky/postfix
指定端口:
bashdocker run --rm --name postfix -e "RELAYHOST=192.168.115.215:587" -e "ALLOWED_SENDER_DOMAINS=example.com" -p 1587:587 boky/postfix
IPv6 地址:
bashdocker run --rm --name postfix -e 'RELAYHOST=[2001:db8::1]:587' -e "ALLOWED_SENDER_DOMAINS=example.com" -p 1587:587 boky/postfix
带认证的中继:
bashdocker run --rm --name postfix \ -e "RELAYHOST=mail.google.com:587" \ -e "RELAYHOST_USERNAME=hello@gmail.com" \ -e "RELAYHOST_PASSWORD=your-password" \ -e "ALLOWED_SENDER_DOMAINS=example.com" \ -p 1587:587 boky/postfix
MYNETWORKS
限制允许发送邮件的网络范围(CIDR 格式,逗号分隔)。默认包含私有网络,如需收紧限制:
bashdocker run --rm --name postfix -e "MYNETWORKS=10.1.2.0/24" -e "ALLOWED_SENDER_DOMAINS=example.com" -p 1587:587 boky/postfix
ALLOWED_SENDER_DOMAINS
必填项,指定允许的发件人域名(空格分隔多个域名),用于 Postfix 中继限制:
bashdocker run --rm --name postfix -e "ALLOWED_SENDER_DOMAINS=example.com example.org" -p 1587:587 boky/postfix
若需仅限制收件人而非发件人,设置 ALLOW_EMPTY_SENDER_DOMAINS=true 并将 ALLOWED_SENDER_DOMAINS 设为空,然后通过自定义脚本扩展配置。
MASQUERADED_DOMAINS
启用地址伪装,重写发件人地址(如 user@sub.example.com → user@example.com):
bashdocker run --rm --name postfix \ -e "ALLOWED_SENDER_DOMAINS=example.com example.org" \ -e "MASQUERADED_DOMAINS=example.com" \ -p 1587:587 boky/postfix
SMTP_HEADER_CHECKS
配置 SMTP 头检查(用于过滤或修改邮件头)。设置为 "1" 时使用默认配置(regexp:/etc/postfix/smtp_header_checks):
bashdocker run --rm --name postfix \ -e "SMTP_HEADER_CHECKS=regexp:/etc/postfix/smtp_header_checks" \ -e "ALLOWED_SENDER_DOMAINS=example.com" \ -p 1587:587 boky/postfix
生成 DKIM 密钥
opendkim-tools 或 opendkim-utils(根据系统)bashmkdir -p /host/keys && cd /host/keys for DOMAIN in example.com example.org; do # 生成 selector 为 "mail" 的密钥 opendkim-genkey -b 2048 -h rsa-sha256 -r -v --subdomains -s mail -d $DOMAIN # 修复哈希算法标识 sed -i 's/h=rsa-sha256/h=sha256/' mail.txt # 重命名文件 mv mail.private $DOMAIN.private mv mail.txt $DOMAIN.txt done
配置 DNS
将 <domain>.txt 文件中的内容添加到对应域名的 DNS TXT 记录(如 mail._domainkey.example.com)。
启动容器并挂载密钥
bashdocker run --rm --name postfix \ -e "ALLOWED_SENDER_DOMAINS=example.com example.org" \ -v /host/keys:/etc/opendkim/keys \ -p 1587:587 boky/postfix
通过自定义脚本扩展 Postfix 配置,脚本需放在 /docker-init.db/ 目录(.sh 扩展名),启动时自动执行。
示例:自定义 Dockerfile
dockerfileFROM boky/postfix LABEL maintainer="Jack Sparrow <jack.sparrow@theblackpearl.example.com>" ADD additional-config.sh /docker-init.db/
示例:自定义脚本(additional-config.sh)
bash#!/bin/sh # 添加自定义 Postfix 配置 postconf -e "address_verify_negative_cache=yes"
yamlversion: '3' services: postfix: image: boky/postfix container_name: postfix environment: - ALLOWED_SENDER_DOMAINS=example.com example.org - HOSTNAME=postfix.example.com - RELAYHOST=smtp.example.com:587 - RELAYHOST_USERNAME=smtp-user@example.com - RELAYHOST_PASSWORD=smtp-password - MYNETWORKS=10.0.0.0/8,172.16.0.0/12 ports: - "1587:587" volumes: - ./dkim-keys:/etc/opendkim/keys - ./custom-scripts:/docker-init.db restart: unless-stopped
root 运行(Postfix 设计如此),子进程以 postfix 用户(UID:GID 100:101)运行opendkim 用户(UID:GID 102:103)运行MYNETWORKS 范围,避免未授权网络发送邮件以下是 boky/postfix 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。




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