== Вариант 1: добавить docker-compose
к crontab
==
* * * * * cd <project dir>/docker-compose && command docker-compose -f docker-compose.yml run --rm -T -w /go/bin <go_app_container> <go_app_name>
== Вариант 2: использовать cron-docker
==
Вот это Docker изображений для запуска cron внутри Docker контейнера
Добавление хрон задания с cron-docker
Предположим, у вас есть папка cron.d
с вашими скриптами cron. Единственное, что вам нужно сделать, это скопировать эту папку в Docker изображение:
# Dockerfile
FROM renskiy/cron:debian
COPY cron.d /etc/cron.d
Затем собрать и создать контейнер:
docker build --tag my_cron .
docker run --detach --name cron my_cron
Просмотр журналов
Для просмотра журналов используйте команду Docker logs :
docker logs --follow cron
Все сценарии cron должны записывать журналы в /var/log/cron.log
. В противном случае вы не сможете просмотреть любой журнал, используя этот способ.
Передача заданий cron по аргументам
Кроме того, вы можете передавать любое задание cron по аргументу (ам) с помощью custom * Команда 1057 * в момент создания контейнера (предоставляя необязательному пользователю опцию -u
/ --user
):
docker run --detach --name cron renskiy/cron:debian start-cron --user www-data \
"0 1 \\* \\* \\* echo '01:00 AM' >> /var/log/cron.log 2>&1" \
"0 0 1 1 \\* echo 'Happy New Year!!' >> /var/log/cron.log 2>&1"
Переменные окружения
Почти любая переменная окружения, которую вы передали Docker будет виден вашим скриптам cron. За исключением $SHELL
, $PATH
, $PWD
, $USER
и др. c.
docker run --tty --rm --interactive --env MY_VAR=foo renskiy/cron:debian start-cron \
"\\* \\* \\* \\* \\* env >> /var/log/cron.log 2>&1"
== Вариант 3: используйте cron-docker
с docker-compose
==
Для вашего случая:
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./www:/var/www
depends_on:
- php
php:
build: ./docker/images/php
volumes:
- ./www:/var/www
mysql:
image: mysql
ports:
- "3306:3306"
volumes:
- ./docker/mysql:/var/lib/mysql
- ./docker/import:/docker-entrypoint-initdb.d
environment:
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
cron_go_app:
image: renskiy/cron:alpine
volumes:
- crontabs:/etc/crontabs
- my_go_app:/app/my_go_app
run: start-cron