我的 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
Run Code Online (Sandbox Code Playgroud)
edited to add crontab.sh
crontab.sh(一些 cron 已被删除):
#!/bin/bash
cat <<- 'EOF' > cron.jobs
0 * * * * node /pulse/scripts/awsPulseTest.js > /tmp/awsPulseTest.log 2>&1
EOF
crontab cron.jobs
Run Code Online (Sandbox Code Playgroud)
错误:
no crontab for root
Run Code Online (Sandbox Code Playgroud)
旁注:
Pau*_*ane 11
这是 dockerfile(而不是文件中的命令)的问题。只有一个CMD
运行(最后一个) - 见https://docs.docker.com/engine/reference/builder/#cmd
一个 Dockerfile 中只能有一个 CMD 指令。如果你列出了多个 CMD,那么只有最后一个 CMD 会生效。
小智 5
正如其他答案已经解释的那样,CMD
每个 Dockerfile只会运行一个,并且您要运行的命令是错误的。
但是您的设置 IMO 有一个更紧迫的问题 - Docker 容器通常不是设计为以这种方式工作的。您应该做的是将主机(或您的编排器)中的 cron 服务作为一次性进程运行(可能使用类似docker run
或的东西docker-compose run
,或者,如果由于某种原因您不想为此启动单独的容器,我猜你可以使用docker exec
)。
不过,这只是我对容器应该如何使用的看法,所以显然你应该谨慎对待它。
归档时间: |
|
查看次数: |
9928 次 |
最近记录: |