docker内部的cron在linux主机上未运行作业(但在mac主机上运行作业)

时间:2019-12-02 05:51:23

标签: docker cron

我有一个测试docker容器,其中cron在前台运行。 cron应该每分钟说“你好”。但事实并非如此。它可以在Mac上运行,但不能在服务器上运行(Ubuntu 18.04.1)。它只是挂起,与没有安排任何cron一样没有任何作用。

这是我的Dockerfile(./crond/Dockerfile):

FROM alpine:3.10
RUN apk add --no-cache bash
RUN apk add --no-cache docker
RUN apk add --no-cache docker-compose

这是我的docker-compose.yml(./):

version: '3.5'
services:
  cron:
    image: crond
    build:
      context: ./crond
    entrypoint: /docker-container-entrypoint
    volumes:
      - ./crontab:/var/spool/cron/crontabs/root
      - ./crond/entrypoint:/docker-container-entrypoint
      - /var/run/docker.sock:/var/run/docker.sock

这是入口点(./crond/entrypoint)

#!/bin/bash
SHELL=/bin/bash crond -l 8 -f

这是crontab文件(./crontab):

*  *  *  *  * echo "hello"

2 个答案:

答案 0 :(得分:0)

首先,您应该使用docker dind image而不是alpine,然后安装docker,docker dind也基于alpine。

crond[1]: crond (busybox 1.30.1) started, log level 8
crond[1]: USER root pid  14 cmd echo hello world from cron
hello world from cron

输出

#!/bin/sh
echo "starting cron job container"
exec "$@"

您也不需要入口点,CMD可以工作或将其更改为

/etc/crontabs/

cron的安装路径为 private val tag = this::class.java.simpleName var historylist: MutableList<HistoryItemDataVo> = arrayListOf() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_history) swipeRefreshLo.setOnRefreshListener(this) historylist.add(HistoryItemDataVo("item1",30000)) historylist.add(HistoryItemDataVo("item2",20000)) historylist.add(HistoryItemDataVo("item3",30000)) historylist.add(HistoryItemDataVo("item4",30000)) historylist.add(HistoryItemDataVo("item5",30000)) val itemRecyclerAdapter = HistoryitemReclycerViewAdapter(this, historylist) recyclerview.adapter = itemRecyclerAdapter recyclerview.layoutManager = LinearLayoutManager(applicationContext) } override fun onRefresh() { swipeRefreshLo.isRefreshing = false } }

答案 1 :(得分:-1)

我发现了类似的问题,但是如果我退出挂载cron配置文件(在您的情况下为./crontab:/var/spool/cron/crontabs/root),并制作一个Dockerfile将COPY的配置放置到同一位置,则它可以工作,

FROM some-image

COPY crontab /var/spool/cron/crontabs/root
CMD crond -f