我有一个安装了cron的超级简单容器:
www2
alive.sh:
implode
我在本地构建了docker镜像并运行它:
* * * * * root /bin/bash /alive.sh
大约一分钟后,我可以检查是否正在创建新文件:
#!/bin/bash
/bin/echo "I'm alive"
/bin/echo $(/bin/date) >> /tmp/alive.log
我标记并将图像推送到Google容器注册表:
docker build -t orian/crondemo:v0 .
docker run --rm -it --name crondemo orian/crondemo:v0
手动启动吊舱:
docker exec crondemo ls /tmp
验证它是否有效:
TAG=eu.gcr.io/<PROJECT_ID>/crondemo:v0
docker tag orian/crondemo:v0 $TAG
kubectl docker -- push $TAG
这是一个问题,没有写入kubectl run crondemo --image=$TAG --replicas=1 --restart=Never
文件。问题在哪里?
我准备了一个带样本的回购:https://github.com/orian/k8s-cron-demo
kubectl exec crondemo ls /tmp
,但它没有解决问题。/tmp/alive.log
。在切换之前,我使用了/var/spool/cron/crontabs/root
和openjdk:8-jre
。它似乎工作了。答案 0 :(得分:3)
我在启用日志时已经跟https://stackoverflow.com/a/21928878/436754。
正在运行:/var/log/syslog
May 4 12:33:05 crondemo rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="14" x-info="http://www.rsyslog.com"] start
May 4 12:33:05 crondemo rsyslogd: imklog: cannot open kernel log(/proc/kmsg): Operation not permitted.
May 4 12:33:05 crondemo rsyslogd-2145: activation of module imklog failed [try http://www.rsyslog.com/e/2145 ]
May 4 12:33:08 crondemo cron[38]: (CRON) INFO (pidfile fd = 3)
May 4 12:33:08 crondemo cron[39]: (CRON) STARTUP (fork ok)
May 4 12:33:08 crondemo cron[39]: (*system*) NUMBER OF HARD LINKS > 1 (/etc/crontab)
May 4 12:33:08 crondemo cron[39]: (*system*crondemo) NUMBER OF HARD LINKS > 1 (/etc/cron.d/crondemo)
May 4 12:33:08 crondemo cron[39]: (CRON) INFO (Running @reboot jobs)
May 4 12:34:01 crondemo cron[39]: (*system*) NUMBER OF HARD LINKS > 1 (/etc/crontab)
May 4 12:34:01 crondemo cron[39]: (*system*crondemo) NUMBER OF HARD LINKS > 1 (/etc/cron.d/crondemo)
这使我成为cron "NUMBER OF HARD LINKS > 1"
的Google,我发现:https://github.com/phusion/baseimage-docker/issues/198
解决方法是修改Dockerfile
以覆盖启动时的cron文件,而不是由Docker挂载。
COPY cronfile /cronfile
docker-entrypoint.sh
:cp /cronfile /etc/cron.d/crondemo
具有解决方法的分支:https://github.com/orian/k8s-cron-demo/tree/with-rsyslog