derjudge/postfixadmin!postfixadmin
Postfix Admin 是一个基于Web的界面,用于管理***、虚拟域和别名,还支持假期/外出消息功能。
本镜像主要基于 hardware/postfixadmin 开发,大部分内容与原镜像保持一致,感谢 hardware 的贡献。截至本文撰写时,本镜像具有以下改进:
tar.gz 文件,版本固定;本镜像通过 SVN 获取源码,默认使用 trunk 分支,也可指定 标签版本。supervisorctl)无法使用,本镜像已修复此问题。可通过以下命令启动本镜像的容器:
docker run -d \ --name postfixadmin \ -p 80:80 \ -e DBPASS=xxxxxxxx \ -h mail.domain.tld \ derjudge/postfixadmin
--name postfixadmin:postfixadmin 可替换为任意名称,方便在 Docker 容器列表中识别和引用。-p 80:80:将容器的 80 端口(HTTP 默认端口)映射到 Docker 主机的所有 IP 上。若该端口已被占用,可限制为特定 IP,详情参考 Docker 官方文档。若计划使用反向代理,可能无需使用 -p 参数。-e DBPASS=xxxxxxxx:xxxxxxxx 需替换为数据库用户(由 DBUSER 变量指定,默认值为 postfix)的密码。-h mail.domain.tld:应设置为 Postfix 服务器的完全限定域名(FQDN)。注意:本镜像不包含关系型数据库(MySQL 或 PostgreSQL),需自行搭建数据库服务器,并确保容器与 Postfix/IMAP 守护进程均可访问该数据库。可通过 Docker 的 链接系统 实现容器间连接。
容器启动后(通常需等待 <10 秒),可通过浏览器访问 [***](将 ip 替换为服务器的 FQDN 或 IP),自动安装脚本将引导完成后续设置。
重启 Docker 容器时,通常会删除旧容器并创建新容器。Docker 通过卷(VOLUMES)机制保留数据,但本文将介绍通过主机文件系统的绑定挂载(Bind mounts)实现持久化,以支持镜像的部分额外功能(如持久化配置和启动钩子)。
docker run 命令的 -v 参数可将卷或主机目录映射到容器内路径。以下以主机目录绑定挂载为例:
首先,在 Docker 主机上创建一个空文件夹,例如 /home/foobar/folder:
#> mkdir -p /home/foobar/folder
然后,在 docker run 命令中添加以下参数,将主机目录绑定挂载到容器内的 /extra:
-v /home/foobar/folder:/extra:ro
此命令将主机的 /home/foobar/folder 目录映射到容器内的 /extra。示例中的 :ro 参数表示容器内挂载为只读(额外安全措施);若需在 /extra 中复制文件(如 postfixadmin/config.local.php),应移除 :ro 或改为 :rw(读写模式)。
容器启动时,若 /extra/init 文件存在且为可执行 shell 脚本,镜像将在启动守护进程前执行该脚本。
注意:脚本不得在前台启动进程,否则会阻塞后续启动流程。
创建并配置启动钩子脚本:
#> touch /home/foobar/folder/init #> chmod +x /home/foobar/folder/init
可在脚本中添加任意命令,例如删除指定文件:
rm -f /postfixadmin/CHANGELOG.TXT
注意:脚本的解释器行(#! ...)需指向 /bin/ash 或 /bin/sh,容器内未安装 bash,请使用兼容语法。
Postfix Admin 有两个配置文件:
config.inc.php:工厂默认配置文件,随 Postfix Admin 源码提供,不应修改,可能随时被覆盖。config.local.php:本地配置文件,用于覆盖默认配置,优先级高于 config.inc.php,且不由源码管理,不会被覆盖。容器首次启动时,若 /extra/config.local.php 不存在,将根据环境变量生成 /postfixadmin/config.local.php;若 /extra/config.local.php 存在,容器启动时会自动将其复制到 /postfixadmin/config.local.php(即使文件内容无效)。
配置持久化流程:安装时修改 /postfixadmin/config.local.php,确认配置无误后,将其复制到 /extra/config.local.php,容器重启时会自动恢复配置。
默认情况下,Postfix Admin 配置项 $CONF['database_type'] 的值由环境变量 DBS 决定,默认 DBS=mysqli,即:
$CONF['database_type'] = 'mysqli';
若需使用 PostgreSQL,在 Docker 命令中添加:
-e DBS=pgsql
此时配置项将变为:
$CONF['database_type'] = 'pgsql';
镜像构建时通过 Subversion 检出 Postfix Admin 源码,默认使用 trunk(最新代码)。若需指定版本,可通过 VERSION 环境变量指定 SVN 标签,例如:
-e VERSION=postfixadmin-x.yy
可使用 Postfix Admin Subversion 标签列表 中的任意标签。例如,使用 2.92 版本:
-e VERSION=postfixadmin-2.92
以下是使用 MariaDB 数据库的 Docker Compose 示例:
docker-compose.yml:
postfixadmin: image: derjudge/postfixadmin container_name: postfixadmin domainname: domain.tld hostname: mail links: - mariadb:dbhost ports: - "80:80" environment: - DBHOST=dbhost - DBUSER=postfix - DBNAME=postfix - DBPASS=xxxxxxx mariadb: image: mariadb:10.1 volumes: - /docker/mysql/db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=xxxx - MYSQL_DATABASE=postfix - MYSQL_USER=postfix - MYSQL_PASSWORD=xxxx
启动命令:
docker-compose up -d
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务