【发布时间】:2021-03-04 17:04:53
【问题描述】:
我想设置一个 Docker 容器,它
- 使用 libfaketime 伪造选定的日期;
- 用那个假的时间运行一个 cron 作业。
我的尝试可以在https://gitlab.com/gablab/proto_docker_cron_libfaketime 找到。最相关的行可能是
# Dockerfile
CMD cron && tail -f /var/log/cron.log
# crontab_for_container
* * * * * for i in 1 2 3; do echo $i; flock -n /.flock_reprio /myscript.sh >> /var/log/cron.log 2>&1; sleep 10; done
更多详情
直接运行脚本
docker-compose exec myservice bash
然后bash /myscript.sh 给出想要的日期。 docker-compose exec myservice date 也一样。
Dockerfile
FROM debian:buster AS base
RUN set -ex; \
apt-get update;
ADD ./myscript.sh /myscript.sh
RUN apt install -y cron
COPY ./crontab_for_container /etc/cron.d/crontab_for_container
RUN chmod 0644 /etc/cron.d/crontab_for_container
RUN crontab /etc/cron.d/crontab_for_container
RUN touch /var/log/cron.log
CMD cron && tail -f /var/log/cron.log
from base as builder
# faketime
RUN apt-get update && apt-get install -y make gcc git
# Get the sources and checkout at stable release 0.98
# see https://github.com/wolfcw/libfaketime/releases
RUN git clone https://github.com/wolfcw/libfaketime.git && \
cd libfaketime && \
git checkout dc2ae5eef31c7a64ce3a976487d8e57d50b8d594 && \
make
from base as runtime
COPY --from=builder /libfaketime/src/libfaketime.so.1 /usr/local/lib
ENV LD_PRELOAD=/usr/local/lib/libfaketime.so.1
ARG FAKETIME_ARG="0d"
ENV FAKETIME=$FAKETIME_ARG
【问题讨论】:
-
请编辑问题以在问题本身中包含相关详细信息。您可以设置
CMD flock -n /.flock_reprio /myscript.sh直接运行命令而不涉及cron,或设置docker run your-image flock ...覆盖容器在启动时运行的命令。 -
你好@DavidMaze,我对使用 cron 运行这个命令特别感兴趣。但是,我编辑添加直接从 bash 运行脚本会产生预期的结果。你能更准确地说明我应该添加的细节吗?我将从 Dockerfile 开始。
-
您包含的完整 Dockerfile 很有用,谢谢。