Перейти к содержанию

Простой почтовый сервер (версия 2)

В дополнение к предыдущей заметке...

Настройка Dnsmasq

address=/avk.local/192.168.20.10
address=/mail.avk.local/192.168.20.10
mx-host=avk.local,192.168.20.10,10
mx-host=mail.avk.local,192.168.20.10,20
ptr-record=10.20.168.192.in-addr.arpa.,mail.avk.local

Сборка образа и запуск контейнера

Сценарий сборки образа Dockerfile:

FROM debian:stable
COPY ./init.sh ./start.sh ./wact.sh /
RUN bash /init.sh
CMD bash /start.sh

Сценарий, выполняемый при сборке образа внутри контейнера init.sh:

#!/bin/bash
apt-get update
apt-get upgrade -y
export DEBIAN_FRONTEND=noninteractive
apt-get install -y iputils-ping dnsutils iproute2 mc nano postfix dovecot-pop3d inotify-tools

Сценарий, выполняемый внутри контейнера при его запуске, start.sh:

#!/bin/bash
postfix start-fg &
dovecot -F &
bash /wact.sh /etc/postfix/main.cf "postfix reload"
bash /wact.sh /etc/dovecot/dovecot.conf "dovecot reload"
tail -f /dev/null

Файл сценария для отслеживания изменений wact.sh:

#!/bin/bash
if [ "$#" -lt 2 ]; then
  echo "usage: $0 <file> <command>"
  exit 1
fi
TARGET_FILE="$1"
shift
COMMAND="$@"
while true; do
  inotifywait -e modify "$TARGET_FILE" >/dev/null 2>&1
  eval "$COMMAND"
done

Файл конфигурации Postfix main.cf:


Файл конфигурации Dovecot dovecot.conf:


Сценарий сборки образа и запуска контейнера docker-compose.yml:

services:
  mailserver:
    build: .
    restart: always
    image: mailserver
    container_name: mailserver
    ports:
      - "25:25"   # SMTP
      - "465:465" # SMTPS
      - "110:110" # POP3
      - "587:587" # SMTP
      - "995:995" # POP3S
      - "993:993" # IMAPS
      - "143:143" # IMAP
    network_mode: "bridge"
    volumes:
      - ./main.cf:/etc/postfix/main.cf:ro
      - ./dovecot.conf:/etc/dovecot/dovecot.conf:ro

Запустить сборку образа и контейнер:

docker-compose build
docker-compose up -d