Есть ли способ запустить Postfix на переднем плане?
Я хочу запустить Postfix как PID 1 в докере. Я не хочу использовать оболочку bash, supervisorD или любую оболочку для его запуска.
Я просто хочу знать, есть ли способ запустить его на переднем плане, чтобы я мог проверить его журналы из «docker logs 'container-name'»
Когда я вручную запускаю «postfix start», он запускается, а затем запускается в фоновом режиме. Есть ли способ сохранить его на переднем плане?
Спасибо
Начиная с Postfix версии 3.3, вы также можете использовать postfix start-fg
, что согласно к документации:
Аналогично start, но демон master (8) должен работать на переднем плане
Это значительно упрощает жизнь!
Начиная с Postfix 3.3, docker изначально поддерживается. Просто соберите и запустите этот Dockerfile:
FROM alpine:3
RUN apk add --no-cache postfix postfix-pcre
RUN echo "maillog_file = /dev/stdout" >> /etc/postfix/main.cf
CMD ["/usr/sbin/postfix","start-fg"]
Постфикс нужен демон системного журнала для регистрации. Для краткого примера Dockerfile
работает Postfix видеть jessfraz / dockerfiles / постфикс.
это бежит rsyslog
в контейнере и запускает Postfix параллельно с подобным этот:
exec /usr/lib/postfix/master -c /etc/postfix -d 2>&1
tail -F /var/log/mail.log
Если я понял ваш вопрос, вы хотите запустить postfix в foregroud, чтобы он получал свои журналы, отправленные на стандартный вывод, и вы могли отображать их с помощью журналов докеров.
Вы не можете запустить Postfix таким образом, чтобы его журналы отправлялись на стандартный вывод. Из официальных документов: «Процессы демона Postfix выполняются в фоновом режиме и регистрируют проблемы и нормальную активность для демона syslog.», Поэтому syslogd используется Postfix для управления своими журналами, и это требование, которого вы не можете избежать.
Поскольку Docker «игнорирует» вывод журнала, который не отправляется на stdout / stderr, вам следует искать альтернативы.
Этот разговор дает вам дополнительную информацию о требованиях к postfix и syslogd и возможных стратегиях в Docker. Обычно он пытается отправить вывод системного журнала в файлы журнала системного журнала вашего хоста, но вы не сможете использовать журналы докеров для их чтения.
Этот старый контейнер в Docker Hub пытается делать то, что вы хотите, по крайней мере, объясняет ту же проблему, которую вы хотите решить.
Наконец я нашел эта статья полезна (упоминается в обсуждении nabble), чтобы понять проблему получения информации syslogd из контейнера.