そもそもコンテナ自体を外部からスケジューリングした方が良い場合もあるので、方法論はプロダクトに合わせて検討して下さい(ここではそのへんの細かい話は抜き)
alpineの場合
1分おきに時刻を出力するだけの単純なcronの例
1 2 3 4 5
| $ cat Dockerfile FROM alpine:3
RUN echo '*/1 * * * * date' > /var/spool/cron/crontabs/root ENTRYPOINT ["crond", "-f"]
|
1
| $ docker build -t hoge .
|
1 2 3 4 5
| $ docker run -d --init hoge | xargs docker logs -f
Wed Mar 11 11:37:00 UTC 2020 Wed Mar 11 11:38:00 UTC 2020 Wed Mar 11 11:39:00 UTC 2020
|
runは --init
付きがオススメ → dockerでtini(–initオプション)を利用するようにしたメモ | 7me
Debianの場合
例として、python
イメージを使用してます(pythonイメージの大元はDebian)
1分おきに python --version
を出力するだけの単純なcronの例
1 2 3 4 5 6 7 8 9 10 11 12
| FROM python:3
# Install busybox RUN apt update \ && apt install -y busybox-static \ && apt clean && apt autoclean \ && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /var/spool/cron/crontabs/ \ && echo '*/1 * * * * python --version' > /var/spool/cron/crontabs/root
ENTRYPOINT ["busybox", "crond", "-f", "-L", "/dev/stderr"]
|
1
| $ docker build -t hoge .
|
1 2 3 4 5 6 7 8 9
| $ docker run -d --init hoge | xargs docker logs -f
crond: crond (busybox 1.30.1) started, log level 8 crond: USER root pid 7 cmd python --version Python 3.8.2 crond: USER root pid 7 cmd python --version Python 3.8.2 crond: USER root pid 7 cmd python --version Python 3.8.2
|