我有一个测试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"
答案 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