나는 DNS 서버와 메일 서버를 동일한 컨테이너에 넣어서 관리한다. 문제는 Postfix가 DNS 서버인 PowerDNS보다 먼저 실행되어 메일 서버 도메인을 찾지 못하고 실행에 실패한다는 것이다.
기본적으로 Postfix는 network.target에, PowerDNS는 network-online.target에 실행되도록 설정되어 있다. 그러므로 Postfix가 실행되었을 때는 아직 PowerDNS는 실행되지 않았으므로 PowerDNS에서 관리하는 내 도메인의 IP 주소를 가져오지 못한다.
이 문제를 해결하기 위해서는 Postfix가 도메인 서버 이후에 실행되도록 하면된다. 설정은 간단히 systemctl edit을 사용하여 postfix.service의 의존성을 수정할 수 있다:
# systemctl edit postfix.service
아래와 같이 PowerDNS 서비스 유닛인 pdns.service 이후에 실행되도록 After= 옵션을 넣으면 된다. DNS 서버를 PowerDNS 대신 BIND9을 사용한다면 pdns.service 대신 named.service를 입력한다:
[Unit] After=pdns.service
여기서 중요한 점은 pdns.service가 enabled 된 상태여야 한다. After= 옵션만 사용하면 해당 서비스 유닛 이후에 실행한다는 의미이지 그 서비스 유닛을 실행까지 한다는 의미가 아니기 때문이다. 아예 postfix.service가 실행하면 DNS 서버도 실행되도록 하고싶다면 Wants=pdns.service나 Requires=pdns.service를 추가하면 된다.
저장하고 재시작해보면 Postfix가 DNS 서버 이후에 실행된 것을 확인할 수 있다.