我正在尝试制作一个非根容器,并在该容器中运行一个cron
任务。但是,我遇到的问题是确保服务cron
在安装后运行。
Dockerfile看起来像这样:
FROM ubuntu:20.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y bash nano cron
RUN adduser --disabled-password -gecos '' -u 1551 face
RUN service cron start
USER 1551
运行容器并以交互方式访问它之后,服务cron
未运行:
face@9eb7bacb90ca:/$ service cron status
* cron is not running
如何确保cron
服务在Dockerfile中运行?
答案 0 :(得分:4)
RUN
指令在映像构建过程中执行命令。
您的RUN service cron start
命令没有做任何有用的事情。即使它成功启动了cron
服务,一旦您的映像构建完成,整个构建环境也会消失。
如果要使进程在从映像开始的容器中运行,则必须安排通过适当的CMD
或ENTRYPOINT
声明来启动该服务,该声明设置了在容器中运行的命令开始。
例如,如下所示:
FROM ubuntu:20.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y cron
CMD ["cron", "-f"]
您会注意到,由于该示例中adduser
不会以非特权用户身份运行,因此我从此示例中删除了USER
命令(和cron
指令)。
如果从该映像启动容器,它将运行cron
守护程序。它本身并不会非常有用。如果您想使用有关您的目标的更多信息来更新您的问题,我很乐意扩展此答案。