У меня есть простая настройка Dockerfile и docker compose для тестирования cron в контейнере.
В качестве последнего шага запускается cron, и я получаю сообщение о том, что cron запущен, но когда я захожу в контейнер и проверяю состояние службы cron, она не работает. Как это возможно?
Мне кажется, я что-то неправильно понимаю, но не могу понять, что это такое.
Dockerfile:
FROM ubuntu:bionic
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Install Cron
RUN apt-get update && apt-get install cron
# Install the crontab
COPY crontab /etc/cron.d/crontab
# Is this needed??
RUN touch /var/log/cron.log
RUN chmod 777 /var/log/cron.log
# Run the command on container startup
CMD service cron start && tail -f /var/log/cron.log
докер-compose.yml
version: '3'
services:
cron:
# build a custom image
build:
context: .
dockerfile: Dockerfile
# a name for easier reference
image: cron
Файл crontab
действителен и содержит:
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# Don't remove the empty line at the end of this file. It is required.
Затем, начиная с:
Выход:
Creating network "docker-cron_default" with the default driver
Building cron
Step 1/8 : FROM ubuntu:bionic
---> 4c108a37151f
Step 2/8 : MAINTAINER wouter.samaey@storefront.be
---> Using cache
---> 0d9fa7049481
Step 3/8 : RUN touch /var/log/cron.log
---> Using cache
---> 39bb838fe945
Step 4/8 : RUN apt-get update && apt-get install cron
---> Using cache
---> d3ce6cc03821
Step 5/8 : COPY crontab /etc/cron.d/crontab
---> Using cache
---> fab99f2e2e77
Step 6/8 : RUN touch /var/log/cron.log
---> Using cache
---> c7fab49def98
Step 7/8 : RUN chmod 777 /var/log/cron.log
---> Using cache
---> 7dc00a5913bd
Step 8/8 : CMD service cron start && tail -f /var/log/cron.log
---> Running in a4bdec436613
Removing intermediate container a4bdec436613
---> 97c867e25091
Successfully built 97c867e25091
Successfully tagged cron:latest
Creating docker-cron_cron_1 ... done
Attaching to docker-cron_cron_1
cron_1 | * Starting periodic command scheduler cron
cron_1 | ...done.
Но когда я открываю оболочку bash в этом контейнере, cron НЕ запускается:
docker run -it cron /bin/bash
root@d6649b402133:/# /etc/init.d/cron status
* cron is not running
Как это возможно?