Dockerfile rsyslog

Я реализовал файл dockerfile для постфикса, который ведет журнал с помощью rsyslog, но при запуске возникает ошибка.

Ошибка вывода:

tail: cannot open '/var/log/mail.log' for reading: No such file or directory
tail: no files remaining

Вот мой Dockerfile:

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y libsasl2-modules postfix rsyslog && rm -rf /var/lib/apt/lists/*

COPY main.cf /etc/postfix/
COPY ca-certificates.crt /etc/ssl/certs/

EXPOSE 25

CMD service rsyslog start && service postfix start && tail -f /var/log/mail.log

Любая помощь будет оценена.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
0
2 347
1

Ответы 1

Удалите эти строки:

RUN touch /dev/xconsole && chgrp syslog /dev/xconsole && chmod 664 /dev/xconsole
RUN service rsyslog restart

И обновите CMD, чтобы сначала запустить rsyslog:

CMD service rsyslog start && service postfix start && tail -f /var/log/mail.log

Поскольку RUN выполняет команду во время сборки образа, тогда как CMD выполняет команду в работающем контейнере, и вам необходимо запустить rsyslogd в работающем контейнере.

Результат Dockerfile может выглядеть так:

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y libsasl2-modules postfix rsyslog; \
    rm -rf /var/lib/apt/lists/*
RUN echo "[smtp.gmail.com]:587 [email protected]:password" > /etc/postfix/sasl_passwd; \
    postmap /etc/postfix/sasl_passwd; \
    sed -i '/relayhost*/c\relayhost = [smtp.gmail.com]:587' /etc/postfix/main.cf; \
    sed -i '/smtp_sasl_auth_enable*/c\smtp_sasl_auth_enable = yes' /etc/postfix/main.cf; \
    sed -i '/smtp_sasl_security_options*/c\smtp_sasl_security_options = noanonymous' /etc/postfix/main.cf; \
    sed -i '/smtp_sasl_password_maps*/c\smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd' /etc/postfix/main.cf; \
    sed -i '/smtp_tls_security_level*/c\smtp_tls_security_level = encrypt' /etc/postfix/main.cf; \
    sed -i '/smtp_tls_CAfile*/c\smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt' /etc/postfix/main.cf

EXPOSE 587

CMD service rsyslog start && service postfix start && tail -f /var/log/mail.log

Собери это: docker build -t postfix -f Dockerfile.postfix .

И при запуске: docker run -it --rm --name postfix postfix

... тогда у вас есть почтовый журнал в консоли:

 * Starting enhanced syslogd rsyslogd                                    [ OK ] 
 * Starting Postfix Mail Transport Agent postfix                                                                                                                                                                   postfix: Postfix is running with backwards-compatible default settings
postfix: See http://www.postfix.org/COMPATIBILITY_README.html for details
postfix: To disable backwards compatibility use "postconf compatibility_level=2" and "postfix reload"
                                                                                                                                                                                                            [ OK ]
Sep 26 20:11:01 6009a2e3d206 postfix[111]: Postfix is running with backwards-compatible default settings
Sep 26 20:11:01 6009a2e3d206 postfix[111]: See http://www.postfix.org/COMPATIBILITY_README.html for details
Sep 26 20:11:01 6009a2e3d206 postfix[111]: To disable backwards compatibility use "postconf compatibility_level=2" and "postfix reload"
Sep 26 20:11:01 6009a2e3d206 postfix/master[156]: daemon started -- version 3.1.0, configuration /etc/postfix
Sep 26 20:11:01 6009a2e3d206 postfix/pickup[159]: error: open file /etc/mailname: No such file or directory
Sep 26 20:11:01 6009a2e3d206 postfix/qmgr[160]: error: open file /etc/mailname: No such file or directory

Вы также можете проверить журнал почты, используя команду exec: docker exec postfix cat /var/log/mail.log. Это может быть полезно при запуске контейнера в качестве демона (флаг -d).


По поводу ошибки rsyslogd-2039: Could not open output pipe - можете проигнорировать.

Но если вы не хотите игнорировать это, вы можете обновить свой CMD и сделать это так:

CMD touch /dev/xconsole && chgrp syslog /dev/xconsole && chmod 664 /dev/xconsole && service rsyslog start && service postfix start && tail -f /var/log/mail.log

все работает нормально, за исключением случаев, когда я добавляю команду COPY / ADD перед EXPOSE, как это (COPY main.cf / etc / postfix /), это приводит к tail: cannot open '/var/log/mail.log' for reading: No such file or directory

MWA 03.10.2018 17:44

Я пробовал это, и это работает. Он также работает с неправильным файлом main.cf и показывает, что * Starting enhanced syslogd rsyslogd [ OK ] * Starting Postfix Mail Transport Agent postfix postmulti: fatal: /etc/postfix/main.cf, line 1: missing '=' after attribute name: "test" Postfix показывает ошибку из-за неправильного файла конфигурации, тем не менее, rsyslog запущен и файл /var/log/mail.log был создан, и контейнер работает без выхода. С моей точки зрения, у вас проблема где-то еще. Вы пробовали это с точно таким же Dockerfile, что и в ответе?

cgrim 05.10.2018 14:46

Я понятия не имею, что не так с этой штукой rsyslog, должно быть решение, потому что она просто случайным образом работала нормально, а иногда и нет, я действительно не мог сказать почему. Но вот мой последний и простой Dockerfile, но проблема все еще существует. Кроме того, всякий раз, когда я пытался его обновить, он просто выдает ошибку.

MWA 05.10.2018 16:49

Другие вопросы по теме