如何将docker cron日志写入stdout / stderr

时间:2019-08-03 03:41:56

标签: docker cron stdout

我有使用cron运行的docker CMD ["cron","-f"]命令。这会将输出写入cron日志文件。

是否可以将这些日志重定向到控制台。

我的基本图片看起来像

FROM ubuntu:latest
RUN ls

RUN apt-get update
RUN apt install -y software-properties-common
RUN add-apt-repository -y ppa:openjdk-r/ppa
RUN apt-get update
RUN apt-get install -y openjdk-12-jre

RUN apt-get -y install cron wget unzip



RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
    && apt-get update -qqy \
    && apt-get -qqy install google-chrome-stable \
    && rm /etc/apt/sources.list.d/google-chrome.list \
    && rm -rf /var/lib/apt/lists/* /var/cache/apt/* \
    && sed -i 's/"$HERE\/chrome"/"$HERE\/chrome" --no-sandbox/g' /opt/google/chrome/google-chrome


ARG CHROME_DRIVER_VERSION=76.0.3809.68
RUN wget --no-verbose -O /tmp/chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip \
    && rm -rf /opt/chromedriver \
    && unzip /tmp/chromedriver_linux64.zip -d /opt \
    && rm /tmp/chromedriver_linux64.zip \
    && mv /opt/chromedriver /opt/chromedriver-$CHROME_DRIVER_VERSION \
    && chmod 755 /opt/chromedriver-$CHROME_DRIVER_VERSION \
    && ln -fs /opt/chromedriver-$CHROME_DRIVER_VERSION /usr/bin/chromedriver

COPY tests-cron /etc/cron.d/tests-cron
RUN chmod 0644 /etc/cron.d/tests-cron
WORKDIR /etc/cron.d
RUN ls
RUN crontab /etc/cron.d/tests-cron

RUN touch /var/log/cron.log



WORKDIR /app
RUN mkdir pricetest

COPY --from=maven-container /app/ pricetest/
RUN cp /usr/bin/chromedriver ./pricetest

WORKDIR /app/pricetest
ENV SHELL=/bin/bash

CMD ["cron", "-f"]

PS:该项目仍在进行中。所以我还没有优化docker构建。

我包含的cronfile(tests-cron

* * * * * root echo "Hello world"

使用的基本图片:ubuntu:latest

1 个答案:

答案 0 :(得分:3)

是的,有一种方法可以将日志重定向到控制台,只需更改Dockerfile的入口点即可。这是基于alpine的工作示例,该示例每分钟运行一次cronjob,并显示输出。

CMD标志

-f  Foreground
-L FILE Log to FILE

Dockerfile

FROM alpine:latest
RUN echo "* * * * * echo hello" | crontab - 
CMD ["crond","-f", "-L", "/dev/stdout"]

enter image description here

另一件事,请始终共享您的基本图片,以便轻松理解问题的背景。

已更新:

ubuntu中的解决方法是稍微替换CMD,但是由于cron不会成为容器的父进程,因此我不推荐这种方法,因为cron。您可以阅读有关这种方法herehere

的更多信息

如果要进行优化,则使用alpine作为docker容器的未来映像,这是这两个映像的大小差异。

  

Alpine仅为5MB,而ubuntu则为91MB

enter image description here

这是使用基本映像ubuntu输出cron的工作示例

FROM ubuntu:latest
RUN apt-get update &&  apt-get -y install cron
RUN touch /var/log/cron.log
RUN (crontab -l ; echo "* * * * * echo "Hello world" >> /var/log/cron.log") | crontab
CMD cron && tail -f /var/log/cron.log