Dockerfilersyslog

Dockerfilersyslog,docker,dockerfile,rsyslog,Docker,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 li

我已经实现了一个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
任何帮助都将不胜感激。

删除以下行:

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@gmail.com: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:无法打开输出管道
错误-您可以忽略它

但是如果你不想忽略它,你可以更新你的
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-before-EXPOSE命令(COPY-main.cf/etc/postfix/)时,一切都正常,结果是
tail:无法打开“/var/log/mail.log”进行读取:没有这样的文件或目录
我尝试过了,效果很好。它也适用于不正确的main.cf文件,并显示
*启动增强型syslogd rsyslogd[OK]*启动Postfix邮件传输代理Postfix postmulti:fatal:/etc/Postfix/main.cf,第1行:属性名称:“test”后缺少“=”
Postfix显示错误,因为配置文件不正确,但是rsyslog正在运行,并且创建了/var/log/mail.log文件,容器运行时没有退出。依我看,你在别的地方有问题。你是否使用与答案中完全相同的Dockerfile进行了尝试?我不知道rsyslog的问题出在哪里,它一定有解决方案,因为它只是随机工作,但有时没有,我真的不知道为什么。但这是我最后一个简单的Dockerfile,但问题仍然存在。而且,每当我试图更新它时,它只会引发一个错误。