在Docker中運行crontab


在把自己的項目通過Docker進行打包時,由於項目中用到了crontab,不過使用到的基礎鏡像python:3.6-slim並沒有安裝這項服務,記錄下在鏡像中安裝和配置crontab的過程。

Dockerfile

由於基礎鏡像中沒有crontab服務,需要在打包自己鏡像的Dockerfile中加入安裝cron服務的步驟。

FROM python:3.6-slim
MAINTAINER whx3000 <wanghaoxi3000@163.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中就可以正常讀取了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM