如何在docker-mailserver容器内配置并运行4个getmail服务
咱们一步一步来搞定在docker-mailserver容器里跑4个getmail服务的需求,核心思路是把本地的配置和服务脚本挂载进容器,然后在容器内配置开机启动:
1. 调整docker-compose.yaml挂载目录
首先修改你的docker-compose文件,新增几个挂载项,把getmail的配置文件和init服务脚本同步到容器里。修改后的配置如下:
services: mailserver: image: ghcr.io/docker-mailserver/docker-mailserver:latest container_name: mailserver hostname: dms.example.com ports: - "25:25" - "1465:465" - "1587:587" - "1993:993" - "4190:4190" volumes: - /docker/data/docker-mailserver/scripts/:/scripts/ # 新增挂载:getmail配置目录 - /docker/data/docker-mailserver/getmail/config/:/etc/getmail/ # 新增挂载:getmail的init服务脚本目录 - /docker/data/docker-mailserver/getmail/init.d/:/etc/init.d/ restart: always
这样咱们本地的配置和脚本就能直接同步到容器里,不用每次进容器修改。
2. 准备4个getmail实例的配置文件
在本地的/docker/data/docker-mailserver/getmail/config/目录下,创建4个配置文件,比如getmail1rc、getmail2rc、getmail3rc、getmail4rc,每个文件对应一个getmail实例。配置里要指定使用/usr/lib/dovecot/deliver来投递邮件,示例配置大概是这样(根据你的实际邮箱调整):
[retriever] type = SimplePOP3Retriever server = pop3.your-email-provider.com username = your-account@example.com password = your-password [destination] type = MDA_external path = /usr/lib/dovecot/deliver arguments = ("-d", "local-user@dms.example.com") [options] delete = False verbose = 0
每个配置文件对应不同的外部邮箱账号,投递到docker-mailserver里的本地用户。
3. 准备4个init.d服务脚本
在本地的/docker/data/docker-mailserver/getmail/init.d/目录下,创建4个服务脚本,分别命名为getmail1、getmail2、getmail3、getmail4。你可以基于已有的init脚本修改,每个脚本对应一个getmail实例的配置文件,示例脚本如下(以getmail1为例):
### BEGIN INIT INFO # Provides: getmail1 # Required-Start: $local_fs $network $named $time $syslog # Required-Stop: $local_fs $network $named $time $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: download mail for getmail instance 1 ### END INIT INFO case "$1" in start) echo "Starting getmail1..." start-stop-daemon --start --background --exec /usr/bin/getmail -- --rcfile /etc/getmail/getmail1rc ;; stop) echo "Stopping getmail1..." pkill -f "getmail --rcfile /etc/getmail/getmail1rc" ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0
注意修改每个脚本里的Provides字段(对应服务名)、Description描述,还有启动命令里的配置文件路径,确保每个脚本对应正确的getmailXrc配置。
4. 配置容器内的服务启动
修改完docker-compose和本地文件后,重启容器:
docker-compose down && docker-compose up -d
然后进入容器,给这4个服务脚本添加执行权限:
docker exec -it mailserver chmod +x /etc/init.d/getmail*
接着设置它们开机自动启动:
docker exec -it mailserver update-rc.d getmail1 defaults docker exec -it mailserver update-rc.d getmail2 defaults docker exec -it mailserver update-rc.d getmail3 defaults docker exec -it mailserver update-rc.d getmail4 defaults
5. 测试服务运行
你可以手动启动其中一个服务测试:
docker exec -it mailserver service getmail1 start
然后查看日志或者进程,确认服务正常运行:
docker exec -it mailserver ps aux | grep getmail
如果一切正常,4个getmail服务就会在容器启动时自动运行,各自拉取对应邮箱的邮件并投递到docker-mailserver里。
备注:内容来源于stack exchange,提问作者bilogic

