如何 运行 在 Alpine 中以非 root 身份进行 Cron
How To Run Cron As Non Root In Alpine
我正在尝试 运行 一个包含以下脚本的容器:
Dockerfile
FROM alpine:latest
USER root
RUN apk update \
&& apk upgrade \
&& apk --no-cache add busybox-suid su-exec
RUN chmod u+s /sbin/su-exec
RUN groupadd -r -g 2001 myuser \
&& useradd -r -u 1001 -g myuser myuser
RUN mkdir /home/myuser \
&& chown myuser /home/myuser
COPY --chown=myuser:myuser entrypoint.sh /home/myuser/entrypoint.sh
COPY --chown=myuser:myuser cronjob /home/myuser/cronjob
USER myuser
RUN crontab /home/myuser/cronjob
WORKDIR /home/myuser
ENTRYPOINT["./entrypoint.sh"]
entrypoint.sh
#!/bin/sh
# Start cron daemon.
su-exec root crond -f -l 8
# Start application.
我了解到提升权限不是好的做法。因此,我希望消除在脚本中使用 su-exec
+ chmod u+s /sbin/su-exec
的情况。我也尝试了 su
和 sudo
,但他们要求输入 root
密码,所以我切换到 su-exec
。我需要提升权限,因为 crond
在不以 root
启动它的情况下不能正确地 运行。此容器将在 Kubernetes 中 运行。
有更好的方法吗?
不知道你想要达到什么目的,但我会在 OS 级别上完成。
您可以创建一个 cronjob 来在您的容器中执行某些操作,这会有所帮助。
尝试使用这样的东西:
/usr/bin/docker exec <container_name> <command>
如果您想进行一些日志记录,您可以这样做:
/usr/bin/docker exec <container_name> <command> > <path_to_log>
按照以下答案后,crond
现在 运行 为 myuser
。
https://github.com/gliderlabs/docker-alpine/issues/381#issuecomment-621946699
Dockerfile
FROM alpine:latest
USER root
RUN apk update \
&& apk upgrade \
&& apk --no-cache add dcron libcap
RUN groupadd -r -g 2001 myuser \
&& useradd -r -u 1001 -g myuser myuser
RUN mkdir /home/myuser \
&& chown myuser /home/myuser
RUN chown myuser:myuser /usr/sbin/crond \
&& setcap cap_setgid=ep /usr/sbin/crond
COPY --chown=myuser:myuser cronjob /home/myuser/cronjob
RUN crontab /home/myuser/cronjob
COPY --chown=myuser:myuser entrypoint.sh /home/myuser/entrypoint.sh
USER myuser
WORKDIR /home/myuser
ENTRYPOINT["./entrypoint.sh"]
entrypoint.sh
#!/bin/sh
# Start cron daemon.
crond -b -l 8
# Start application.
我正在尝试 运行 一个包含以下脚本的容器:
Dockerfile
FROM alpine:latest
USER root
RUN apk update \
&& apk upgrade \
&& apk --no-cache add busybox-suid su-exec
RUN chmod u+s /sbin/su-exec
RUN groupadd -r -g 2001 myuser \
&& useradd -r -u 1001 -g myuser myuser
RUN mkdir /home/myuser \
&& chown myuser /home/myuser
COPY --chown=myuser:myuser entrypoint.sh /home/myuser/entrypoint.sh
COPY --chown=myuser:myuser cronjob /home/myuser/cronjob
USER myuser
RUN crontab /home/myuser/cronjob
WORKDIR /home/myuser
ENTRYPOINT["./entrypoint.sh"]
entrypoint.sh
#!/bin/sh
# Start cron daemon.
su-exec root crond -f -l 8
# Start application.
我了解到提升权限不是好的做法。因此,我希望消除在脚本中使用 su-exec
+ chmod u+s /sbin/su-exec
的情况。我也尝试了 su
和 sudo
,但他们要求输入 root
密码,所以我切换到 su-exec
。我需要提升权限,因为 crond
在不以 root
启动它的情况下不能正确地 运行。此容器将在 Kubernetes 中 运行。
有更好的方法吗?
不知道你想要达到什么目的,但我会在 OS 级别上完成。
您可以创建一个 cronjob 来在您的容器中执行某些操作,这会有所帮助。 尝试使用这样的东西:
/usr/bin/docker exec <container_name> <command>
如果您想进行一些日志记录,您可以这样做:
/usr/bin/docker exec <container_name> <command> > <path_to_log>
crond
现在 运行 为 myuser
。
https://github.com/gliderlabs/docker-alpine/issues/381#issuecomment-621946699
Dockerfile
FROM alpine:latest
USER root
RUN apk update \
&& apk upgrade \
&& apk --no-cache add dcron libcap
RUN groupadd -r -g 2001 myuser \
&& useradd -r -u 1001 -g myuser myuser
RUN mkdir /home/myuser \
&& chown myuser /home/myuser
RUN chown myuser:myuser /usr/sbin/crond \
&& setcap cap_setgid=ep /usr/sbin/crond
COPY --chown=myuser:myuser cronjob /home/myuser/cronjob
RUN crontab /home/myuser/cronjob
COPY --chown=myuser:myuser entrypoint.sh /home/myuser/entrypoint.sh
USER myuser
WORKDIR /home/myuser
ENTRYPOINT["./entrypoint.sh"]
entrypoint.sh
#!/bin/sh
# Start cron daemon.
crond -b -l 8
# Start application.