diff --git a/Dockerfile b/Dockerfile index ba10155..07039d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,13 +13,19 @@ RUN make clean && make build FROM docker:25.0.5-dind USER root RUN apk add --no-cache \ - git bash supervisor + git bash supervisor python3 py3-pip + +RUN pip3 install --break-system-packages supervisord-dependent-startup COPY --from=builder /opt/src/act_runner/act_runner /usr/local/bin/act_runner COPY --from=builder /opt/src/act_runner/scripts/supervisord.conf /etc/supervisord.conf COPY --from=builder /opt/src/act_runner/scripts/run.sh /opt/act/run.sh COPY --from=builder /opt/src/act_runner/scripts/rootless.sh /opt/act/rootless.sh +COPY /root / + +RUN chmod +x /healthcheck.sh + ENV DOCKER_PRUNE_INTERVAL="0 0 * * *" # Add Crontab for root user @@ -28,17 +34,6 @@ RUN echo "${DOCKER_PRUNE_INTERVAL} echo Pruning docker volumes && docker volume # Remove warning from supervisord about running as root RUN sed -i '/\[supervisord\]/a user=root' /etc/supervisord.conf -# Add stdout/stderr logs for docker -RUN sed -i '/\[program:dockerd\]/a stdout_logfile_maxbytes=0' /etc/supervisord.conf && \ - sed -i '/\[program:dockerd\]/a stdout_logfile=/dev/fd/1' /etc/supervisord.conf && \ - sed -i '/\[program:dockerd\]/a redirect_stderr=true' /etc/supervisord.conf - -# Add Cron to supervisord -RUN echo "" >> /etc/supervisord.conf && \ - echo "[program:cron]" >> /etc/supervisord.conf && \ - echo "command=/usr/sbin/crond -f" >> /etc/supervisord.conf && \ - echo "stdout_logfile=/dev/fd/1" >> /etc/supervisord.conf && \ - echo "stdout_logfile_maxbytes=0" >> /etc/supervisord.conf && \ - echo "redirect_stderr=true" >> /etc/supervisord.conf +HEALTHCHECK --interval=30s --timeout=15s --start-period=30s --retries=3 CMD "/healthcheck.sh" ENTRYPOINT ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"] \ No newline at end of file diff --git a/root/etc/supervisor.d/act.conf b/root/etc/supervisor.d/act.conf new file mode 100644 index 0000000..f3d7340 --- /dev/null +++ b/root/etc/supervisor.d/act.conf @@ -0,0 +1,8 @@ +[program:act_runner] +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +redirect_stderr=true +command=/opt/act/rootless.sh +dependent_startup=true +dependent_startup_wait_for=dockerd:running +autostart=false \ No newline at end of file diff --git a/root/etc/supervisor.d/cron.conf b/root/etc/supervisor.d/cron.conf new file mode 100644 index 0000000..e7dc936 --- /dev/null +++ b/root/etc/supervisor.d/cron.conf @@ -0,0 +1,5 @@ +[program:cron] +command=/usr/sbin/crond -f +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +redirect_stderr=true \ No newline at end of file diff --git a/root/etc/supervisor.d/docker.conf b/root/etc/supervisor.d/docker.conf new file mode 100644 index 0000000..514c054 --- /dev/null +++ b/root/etc/supervisor.d/docker.conf @@ -0,0 +1,8 @@ +[program:dockerd] +command=/usr/local/bin/dockerd-entrypoint.sh +stdout_logfile_maxbytes=0 +stdout_logfile=/dev/fd/1 +redirect_stderr=true +startsecs=20 +dependent_startup=true +autostart=false \ No newline at end of file diff --git a/root/etc/supervisord.conf b/root/etc/supervisord.conf new file mode 100644 index 0000000..e0fa68d --- /dev/null +++ b/root/etc/supervisord.conf @@ -0,0 +1,28 @@ +[supervisord] +nodaemon=true +logfile=/dev/null +logfile_maxbytes=0 + +[include] +files = /etc/supervisor.d/*.conf + +[unix_http_server] +file=/run/supervisord.sock + +[supervisorctl] +serverurl=unix:///run/supervisord.sock + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +#[eventlistener:processes] +#command=bash -c "echo READY && read line && kill -SIGQUIT $PPID" +#events=PROCESS_STATE_STOPPED,PROCESS_STATE_EXITED,PROCESS_STATE_FATAL + +[eventlistener:dependentstartup] +command=python -m supervisord_dependent_startup +autostart=true +autorestart=unexpected +startretries=0 +exitcodes=0,3 +events=PROCESS_STATE \ No newline at end of file diff --git a/root/healthcheck.sh b/root/healthcheck.sh new file mode 100644 index 0000000..8d8a4c9 --- /dev/null +++ b/root/healthcheck.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Check docker socket is running +ls -l /run | grep docker.sock + +# Check act is running +/usr/bin/supervisorctl status act_runner | grep RUNNING \ No newline at end of file