首頁 > 軟體

在Docker中執行crontab

2020-06-16 16:42:06

在把自己的專案通過Docker進行打包時,由於專案中用到了crontab,不過使用到的基礎映象Python:3.6-slim並沒有安裝這項服務,記錄下在映象中安裝和設定crontab的過程。

Dockerfile

由於基礎映象中沒有crontab服務,需要在打包自己映象的Dockerfile中加入安裝cron服務的步驟。
FROM python:3.6-slim
MAINTAINER linuxidc root@linuxidc.com

RUN apt-get update &&
    apt-get install -y --no-install-recommends
    cron &&
    rm -rf /var/lib/apt/lists/* &&
    apt-get clean

RUN chmod +x ./docker-entrypoint.sh

ENV LC_ALL C.UTF-8
ENTRYPOINT ["./docker-entrypoint.sh"]

執行apt安裝時注意加入-y --no-install-recommends,並且在安裝完成後執行rm -rf /var/lib/apt/lists/* && apt-get clean命令,可以有效減小映象的體積。

這樣安裝完cron服務後,crontab服務並不會自啟動,還需要一個docker-entrypoint.sh啟動指令碼來新增crontab的啟動命令。

啟動指令碼
#!/bin/bash
set -x

# 儲存環境變數,開啟crontab服務
env >> /etc/default/locale
/etc/init.d/cron start

/etc/init.d/cron start用於啟動crontab服務,但這樣啟動的crontab服務中設定的定時命令是沒有Dockerfile中設定的環境變數的。因此還需要在這之前執行env >> /etc/default/locale,這樣有Dockerfile中通過ENV設定的環境變數在crontab中就可以正常讀取了。


IT145.com E-mail:sddin#qq.com