Cron

docker - root 沒有 crontab

  • May 22, 2017

我的 Dockerfile 似乎建構正確(它告訴我是這樣)。當我執行容器時,我收到以下錯誤消息。我嘗試在CMD有和沒有服務目錄的情況下執行命令 ( )。

crontab.sh基本上將 cron 計劃寫入文本文件 ( cron.jobs),然後將文本文件導入 crontab。

Dockerfile:

FROM node:0.10
MAINTAINER Tom

VOLUME /var/log/

RUN mkdir /pulse
ADD . /pulse
WORKDIR /pulse

RUN apt-get update && apt-get install -y cron

ADD *.sh /pulse/
RUN chmod 750 /pulse/crontab.sh && chmod 750 /pulse/

RUN chmod 644 /etc/crontab

CMD cron -f
CMD touch /var/log/cron.log && sh /pulse/crontab.sh && tail -f /var/log/cron.log
CMD cron /pulse/cron.jobs
CMD crontab -l

edited to add crontab.sh

crontab.sh(一些 crons 已被刪除):

#!/bin/bash

cat <<- 'EOF' > cron.jobs

0 * * * * node /pulse/scripts/awsPulseTest.js > /tmp/awsPulseTest.log 2>&1

EOF

crontab cron.jobs

錯誤:

no crontab for root

旁注:

  • Pulse 是服務的名稱。
  • 由於服務原因node版本過舊,將進行升級。
  • 該服務主要用於節點中的 cron 作業

這是 dockerfile 的問題(而不是文件中的命令)。只CMD執行一個(最後一個) - 請參閱https://docs.docker.com/engine/reference/builder/#cmd

一個 Dockerfile 中只能有一個 CMD 指令。如果您列出多個 CMD,則只有最後一個 CMD 才會生效。

正如其他答案已經解釋的那樣,CMD每個 Dockerfile 只會執行一個,並且您要執行的命令是錯誤的。

但是您的設置 IMO 存在一個更緊迫的問題 - Docker 容器通常不設計為以這種方式工作。相反,您應該做的是從主機(或您的協調器)作為一次性程序執行 cron 服務(可能使用類似docker runor的東西docker-compose run,或者,如果由於某種原因您不想為此啟動一個單獨的容器,我猜你可以使用docker exec)。

這只是我對如何使用容器的看法,所以顯然你應該對它持保留態度。

引用自:https://serverfault.com/questions/851475