Docker容器启动后Cron服务无法运行,容器自动退出求助
问题:Docker容器配置Cron服务启动失败,容器自动退出
报错信息
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "cron": executable file not found in $PATH: unknown.
我的Dockerfile内容
# Pull base image. FROM amazonlinux:2 ARG TERRAFORM_VERSION=1.2.6 RUN \ yum update -y && \ yum install unzip -y && \ yum install wget -y && \ yum install vim -y \ yum install bash -y ################################ # Install Terraform ################################ # Download terraform for linux RUN wget https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip RUN unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip RUN mv terraform /usr/local/bin/ ################################ # Install python ################################ RUN yum install -y python3-pip RUN pip3 install --upgrade pip ################################ # Install AWS CLI ################################ RUN pip install awscli --upgrade --user # add aws cli location to path ENV PATH=~/.local/bin:$PATH RUN mkdir ~/.aws && touch ~/.aws/credentials ################################ # Install Cron ################################ RUN yum -y install ca-certificates shadow-utils cronie && yum -y clean all # Creating crontab COPY ./automation.sh /var/automation.sh # Giving executable permission to script file. RUN chmod +x /var/automation.sh \ && echo "* * * * * /bin/bash /var/automation.sh" >> /var/crontab # Ensure sudo group users are not asked for a password RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> \ /etc/sudoers #run cron process through cmd CMD ["cron", "-f"]
问题原因与解决方法
核心原因
Amazon Linux 2中安装cronie后,cron的可执行文件是/usr/sbin/crond,而非cron,你指定的启动命令cron不存在,导致容器启动失败;同时Dockerfile中还有几处语法和配置问题需要修正。
具体修复步骤
修正Cron启动命令
将CMD ["cron", "-f"]改为CMD ["/usr/sbin/crond", "-n"],-n参数让crond在前台运行,保证容器不会因为后台进程退出而停止。修复yum安装命令的语法错误
原Dockerfile中安装vim的行末尾缺少&&,导致bash执行报错,修改为:RUN \ yum update -y && \ yum install unzip -y && \ yum install wget -y && \ yum install vim -y && \ yum install bash -y修正crontab任务加载问题
你把任务写到/var/crontab,但默认crond不会自动加载该文件,可选择以下两种方式之一:- 将任务添加到系统crontab:
RUN echo "* * * * * /bin/bash /var/automation.sh" >> /etc/crontab - 将任务添加到root用户的任务列表:
RUN echo "* * * * * /bin/bash /var/automation.sh" | crontab -
- 将任务添加到系统crontab:
修复PATH环境变量解析问题
ENV指令中~不会被解析为用户家目录,需替换为绝对路径:ENV PATH=/root/.local/bin:$PATH
修正后的完整Dockerfile示例
# Pull base image. FROM amazonlinux:2 ARG TERRAFORM_VERSION=1.2.6 RUN \ yum update -y && \ yum install unzip -y && \ yum install wget -y && \ yum install vim -y && \ yum install bash -y ################################ # Install Terraform ################################ RUN wget https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip RUN unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip RUN mv terraform /usr/local/bin/ ################################ # Install python ################################ RUN yum install -y python3-pip RUN pip3 install --upgrade pip ################################ # Install AWS CLI ################################ RUN pip install awscli --upgrade --user ENV PATH=/root/.local/bin:$PATH RUN mkdir /root/.aws && touch /root/.aws/credentials ################################ # Install Cron ################################ RUN yum -y install ca-certificates shadow-utils cronie && yum -y clean all COPY ./automation.sh /var/automation.sh RUN chmod +x /var/automation.sh RUN echo "* * * * * /bin/bash /var/automation.sh" | crontab - RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers CMD ["/usr/sbin/crond", "-n"]
内容的提问来源于stack exchange,提问作者Devops-Learner
相关产品推荐
相关产品推荐

