我有一个以非 root 用户身份运行的 centos7 docker 容器。我安装了 cronie 并从容器 entrypoint.sh 以非 root 用户身份启动了 crond
entryoint.sh
#!/bin/bash
sleep 2h
我登录到容器并在调试模式下手动运行 crontab
crond -x ext
我的 Dockerfile
FROM centos:7
RUN groupadd rsuser -g 10001
RUN useradd -d /home/rsuser -m rsuser -u 10001 -g 10001 -p rsuser
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
RUN yum install -y cronie && yum clean all
RUN touch /var/run/crond.pid
RUN echo '* * * * * root echo "crontab running"' >> /etc/crontab
RUN setcap cap_setgid+ep /usr/sbin/crond && \
setcap cap_setuid+ep /usr/sbin/crond
RUN chown -R rsuser:rsuser /var/run/crond.pid
RUN chmod 400 /etc/shadow
USER 10001
ENTRYPOINT ["/entrypoint.sh"]
如果我以 root 身份运行 crontab 命令,则会出现以下错误
* * * * * root echo "crontab running"
log_it: (CRON 23) ERROR (setgid failed): Operation not permitted
如果我以 rsuser 身份运行 crontab 命令,则会出现以下错误
* * * * * rsuser echo "crontab running"
log_it: (CRON 23) ERROR (initgroups failed): Operation not permitted
没有找到解决方法。