Search code examples
dockerdocker-composecrondockerfile

my crontab not working on php:7.4-apache docker-compose


the problem is my crontab not running in docker. Here is my code.

docker-compose.yml

version: '3.1'

services:
  web:
    container_name: autoping
    restart: always
    # image: php:7.4-apache
    build: .
    volumes:
      - ./html:/var/www/html
    ports:
      - 80:80
    depends_on:
      - db

  db:
    image: mariadb:10.5.5
    container_name: mine_mariadb
    restart: unless-stopped
    volumes:
       - ./db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: xxx
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin:latest
    container_name: mine_phpmyadmin
    restart: always
    ports:
      - 8686:80
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: xxx
      UPLOAD_LIMIT: 300

volumes:
  db_data:

Dockerfile

FROM php:7.4-apache

ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod uga+x /usr/local/bin/install-php-extensions && sync
RUN apt-get update && apt-get install -qq \
    curl \
    cron \
    vim \
    libzip-dev \
    && docker-php-ext-install pdo_mysql mysqli zip \
    && a2enmod rewrite
WORKDIR /var/www/html
RUN a2enmod rewrite headers
COPY autoCheck.cron /
RUN crontab /autoCheck.cron 

autoCheck.cron

*/1 * * * * php -q /var/www/html/crons/cron.php >/dev/null 2>&1

when i check my container throught web's container and type "crontab -l". It show my autoCheck' Code but the code not running. So, How to use crontab working in Docker?


Solution

  • Try this instead:

    # My cron lines
    RUN echo "* * * * * www-data echo 'Hello Word' > /var/www/test.txt" >> /etc/crontab
    
    # Change CMD to have cron running
    RUN echo "#!/bin/sh\ncron\n/usr/local/bin/apache2-foreground" > /usr/bin/run
    RUN chmod u+x /usr/bin/run
    CMD ["run"]