我试图将crontab添加到我的Docker容器中,但是由于安全法规的原因,我无法将USER保留为root。使用下面的Dockerfiel,该crond以用户应用程序启动,而crontab永不触发。
当以root用户身份使用时,一切都会按预期进行,但是将用户更改为app将使crond从用户应用程序启动,这是(我认为)问题所在。我尝试了How to start crond as non-root user in a Docker Container?,但这无济于事。
FROM alpine:3.9
ADD https://storage.googleapis.com/kubernetes-release/release/v1.6.4/bin/linux/amd64/kubectl /usr/local/bin/kubectl-binary
RUN chmod +x /usr/local/bin/kubectl-binary
COPY kubectl-retry-with-backoff.sh /usr/local/bin/kubectl
RUN chmod +x /usr/local/bin/kubectl
RUN apk add --no-cache bash sed curl redis=4.0.12-r0 ca-certificates su-exec shadow \
&& rm -rf /var/cache/apk/*
ADD crontab /etc/cron.d/delete-rdb
COPY delete_rdb.sh /usr/local/bin/delete_rdb.sh
COPY launcher.sh /usr/local/bin/launcher.sh
RUN chmod +x /usr/local/bin/delete_rdb.sh \
&& chmod 755 /etc/cron.d/delete-rdb \
&& chown -R app:app /etc/cron.d/delete-rdb \
&& chown -R app:app /usr/local/bin/delete_rdb.sh \
&& crontab /etc/cron.d/delete-rdb
ENTRYPOINT [ "bash", "-c" ]
CMD [ "usr/sbin/crond && /usr/local/bin/launcher.sh | tee /var/log/runner.txt" ]
USER app
我相信以root身份运行crond可以解决我的问题,但是也许有更好的方法可以完全做到这一点。有什么方法可以通过Dockerfile强制crond以root身份启动?或者我可以以某种方式以非root身份运行crond?