浏览代码

[ClamAV] Use tini, check if background procs are running, use pipe to output to stdout

André 8 年之前
父节点
当前提交
c5dd30b058
共有 2 个文件被更改,包括 30 次插入8 次删除
  1. 4 2
      data/Dockerfiles/clamd/Dockerfile
  2. 26 6
      data/Dockerfiles/clamd/bootstrap.sh

+ 4 - 2
data/Dockerfiles/clamd/Dockerfile

@@ -7,7 +7,7 @@ COPY dl_files.sh bootstrap.sh ./
 
 # Installation
 RUN apk add --update \
-	&& apk add --no-cache clamav clamav-libunrar curl bash \
+	&& apk add --no-cache clamav clamav-libunrar curl bash tini \
 	&& chmod +x /dl_files.sh \
 	&& set -ex; /bin/bash /dl_files.sh \
 	&& mkdir /run/clamav \
@@ -15,12 +15,14 @@ RUN apk add --update \
 	&& chmod 750 /run/clamav \
 	&& sed -i '/Foreground yes/s/^#//g' /etc/clamav/clamd.conf \
 	&& sed -i '/TCPSocket 3310/s/^#//g' /etc/clamav/clamd.conf \
+  && sed -i 's#LogFile /var/log/clamav/clamd.log#LogFile /tmp/logpipe_clamd#g' /etc/clamav/clamd.conf \
 	&& sed -i 's/#PhishingSignatures yes/PhishingSignatures no/g' /etc/clamav/clamd.conf \
 	&& sed -i 's/#PhishingScanURLs yes/PhishingScanURLs no/g' /etc/clamav/clamd.conf \
+  && sed -i 's#UpdateLogFile /var/log/clamav/freshclam.log#UpdateLogFile /tmp/logpipe_freshclam#g' /etc/clamav/freshclam.conf \
 	&& sed -i '/Foreground yes/s/^#//g' /etc/clamav/freshclam.conf
 
 # Port provision
 EXPOSE 3310
 
 # AV daemon bootstrapping
-CMD ["/bootstrap.sh"]
+CMD ["/sbin/tini", "-g", "--", "/bootstrap.sh"]

+ 26 - 6
data/Dockerfiles/clamd/bootstrap.sh

@@ -1,14 +1,34 @@
 #!/bin/bash
-touch /var/log/clamav/clamd.log /var/log/clamav/freshclam.log
-chown -R clamav:clamav /var/log/clamav/
 
 if [[ "${SKIP_CLAMD}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
-	echo "SKIP_CLAMD=y, skipping ClamAV..."
-	sleep 365d
-	exit 0
+  echo "SKIP_CLAMD=y, skipping ClamAV..."
+  sleep 365d
+  exit 0
 fi
 
+# Create log pipes
+touch /var/log/clamav/clamd.log /var/log/clamav/freshclam.log
+mkfifo -m 600 /tmp/logpipe_clamd
+mkfifo -m 600 /tmp/logpipe_freshclam
+chown -R clamav:clamav /var/log/clamav/ /tmp/logpipe_*
+cat <> /tmp/logpipe_clamd 1>&2 &
+cat <> /tmp/logpipe_freshclam 1>&2 &
+
+# Prepare
+BACKGROUND_TASKS=()
+
 freshclam -d &
+BACKGROUND_TASKS+=($!)
+
 clamd &
+BACKGROUND_TASKS+=($!)
 
-tail -f /var/log/clamav/clamd.log /var/log/clamav/freshclam.log
+while true; do
+  for bg_task in ${BACKGROUND_TASKS[*]}; do
+    if ! kill -0 ${bg_task} 1>&2; then
+      echo "Worker ${bg_task} died, stopping container waiting for respawn..."
+      kill -TERM 1
+    fi
+    sleep 10
+  done
+done