1 回答
TA贡献1852条经验 获得超7个赞
== 选项 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 映像
Debian-基于:Dockerfile,start-cron
Alpine-基于:Dockerfile,start-cron
添加 cron 作业 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 作业
start-cron此外,您可以在创建容器时使用自定义命令通过参数传递任何 cron 作业(为可选用户提供-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等除外。
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
- 1 回答
- 0 关注
- 168 浏览
添加回答
举报