I AM NOT A SERVER ADMINISTRATOR! In case that wasn’t clear, I am not a server administrator. What little I know about servers is enough to allow me to build one in order to my job. Everything is guessing and Googling. Recently, I had a requirement to send emails from a Docker container. Guess how many official Postfix Docker images there are. If you guessed more than zero, you were wrong. Also, you really should have seen that coming.
So I needed a Postfix image to act as a relay SMTP server for my application that was also in a Docker container. After more trial and error than I would like to admit, I got it to work. And then it stopped working. The thing is, I got it to work as a daemon. I then used the start-fg command line argument to start it in the foreground in order to keep the container running. Great idea. Almost.
When it ran as a daemon, it worked perfectly, but I couldn’t use it as a daemon because I needed it to run in the foreground. When it ran in the foreground, it gave me DNS errors. Why would DNS only work as a daemon
The daemon created links or copied certain files from /etc to /var/spool/postfix/etc. The start-
The next attempt was to run as a service again and look at the contents of the /var/spool/postfix/etc directory. I then copied each of the files in it from /etc and like magic, my new container worked.
Here is the Dockerfile I used.
FROM ubuntu:18.04 EXPOSE 25 RUN apt-get update && \ echo "postfix postfix/mailname string example.com" | debconf-set-selections && \ echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections && \ apt-get install postfix mailutils -y RUN update-rc.d -f postfix remove RUN postconf -e syslog_name=example-smtp RUN postconf -e mynetworks=0.0.0.0/0 RUN cp /etc/host.conf /etc/hosts /etc/nsswitch.conf /etc/resolv.conf /etc/services /var/spool/postfix/etc CMD ["postfix", "start-fg"]
In order for you to use it, swap “example” with your domain. Enjoy.