我是Docker的新手,请多多包涵:
我有5个Java应用程序的集合,这些应用程序正试图在docker容器中运行(通过容器内的cronjobs)。
我也创建了Dockerfile和docker-compose文件。我可以启动Docker容器,也可以在容器内手动运行应用程序。问题是,它似乎并没有通过cron运行我的东西。为了进行测试,我添加了一个cron条目,以便每分钟向文件回声问候世界。它似乎没有运行。这是我的文件:
Dockerfile
FROM ubuntu:latest
ENV LANG C.UTF-8
ENV TZ=EST
ENV DEBIAN_FRONTEND=noninteractive
RUN mkdir -p /wrds/ingesters/logs
WORKDIR /wrds/ingesters
RUN apt-get update && apt-get install -y \
tzdata \
apt-utils \
cron \
default-jdk \
bash \
postgresql \
bsd-mailx \
postfix \
vim
COPY *.jar /wrds/ingesters/
COPY run* /wrds/ingesters/
COPY *.properties /wrds/ingesters/
ADD ingester_cron /etc/cron.d/root
RUN chmod 0644 /etc/cron.d/root
RUN touch /var/log/cron.log
RUN crontab /etc/cron.d/root
RUN mkfifo /var/spool/postfix/public/pickup
RUN echo 'alias ll="ls -la"' >> ~/.bashrc
RUN echo 'stty erase ^H' >> ~/.bashrc
CMD cron -L15 && tail -f /var/log/cron.log
docker-compose.yml(出于安全考虑,所有大写字母都由我编辑)
version: '3.5'
services:
wrds_hylo_db_ingesters:
image: HOSTNAME/wrds/CONTAINERNAME
container_name: CONTAINERNAME
restart: always
env_file: env.dev-v2
volumes:
- /ingester_logs:/wrds/ingesters/logs
pid: host
ingester_cron
0 17 * * 1 root /wrds/ingesters/run_script1
0 20 * * 1 root /wrds/ingesters/run_script2
0 23 * * 1 root /wrds/ingesters/run_script3
0 2 * * 2 root /wrds/ingesters/run_script4
* * * * * root echo "Hello World" >> /var/log/cron.log 2>&1
当我运行docker容器并ssh进入时,我得到以下信息:
root@1b0d719feada:/var/log# service cron status
* cron is running
crontab -l
0 17 * * 1 root /wrds/ingesters/run_script1
0 20 * * 1 root /wrds/ingesters/run_script2
0 23 * * 1 root /wrds/ingesters/run_script3
0 2 * * 2 root /wrds/ingesters/run_script4
* * * * * root echo "Hello World" >> /var/log/cron.log 2>&1
任何帮助将不胜感激!
答案 0 :(得分:0)
也许您看一下日志。也许您可以看到您的老兄正在做什么。
Cron:*/3 * * * * YOUR-CRON_BLABLA > /dev/stdout
记录到容器输出
例如:docker-compose logs -f
我像这样加载我的cron作业:
COPY ./MY-CRON-FILE.cron /
RUN crontab /tmp/MY-CRON-FILE.cron
...
有时也取决于特定用户的应用程序:
RUN crontab -u MY-USER /MY-CRON-FILE.cron