2021-05-12 14:32:11
在Docker中執行crontab
在把自己的專案通過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中就可以正常讀取了。
相關文章