]> git.puffer.fish Git - mirror/frr.git/commitdiff
docker: Use tini unilaterally and stop tailing /dev/null 8861/head
authorWesley Coakley <w@wesleycoakley.com>
Wed, 9 Jun 2021 03:50:43 +0000 (23:50 -0400)
committerWesley Coakley <w@wesleycoakley.com>
Wed, 16 Jun 2021 02:23:50 +0000 (22:23 -0400)
tini is a hyper-minimal PID 0 which spawns a child process (watchfrr.sh
in our case), reaps zombies and forwards signals to the script. Starting
watchfrr.sh directly instead of through the old `tail /dev/null` or
`sleep 365d` helps keep things clean too :)

While tini was previously only used in the Alpine container it is useful
to apply this PID 0 to all containers except the special CI ones.

Fixes: #8788
Signed-off-by: Wesley Coakley <w@wesleycoakley.com>
docker/alpine/Dockerfile
docker/alpine/docker-start
docker/centos-7/Dockerfile
docker/centos-7/docker-start
docker/centos-8/Dockerfile
docker/centos-8/docker-start
docker/debian/Dockerfile
docker/debian/docker-start

index cb2b3eb69e30dfd7091819adb8fe99c723cc3af2..8fc36c0e5f10dca4e6b33366ea11c1b4b69d09d9 100644 (file)
@@ -55,5 +55,14 @@ RUN apk add \
                --no-cache \
                --allow-untrusted /pkgs/apk/*/*.apk \
        && rm -rf /pkgs
+
+# Own the config / PID files
+RUN mkdir -p /var/run/frr
+RUN chown -R frr:frr /etc/frr /var/run/frr
+
+# Simple init manager for reaping processes and forwarding signals
+ENTRYPOINT ["/sbin/tini", "--"]
+
+# Default CMD starts watchfrr
 COPY docker/alpine/docker-start /usr/lib/frr/docker-start
-CMD [ "/sbin/tini", "--", "/usr/lib/frr/docker-start" ]
+CMD ["/usr/lib/frr/docker-start"]
index 3f7737d3bf6efd1403aeeafff1c4e6351c46aaf3..c20df42e8e716a4a1dcc7a45fa2aa174a8e6260f 100755 (executable)
@@ -1,12 +1,4 @@
-#!/bin/sh
+#!/bin/ash
 
-set -e
-
-##
-# For volume mounts...
-##
-chown -R frr:frr /etc/frr || true
-/usr/lib/frr/frrinit.sh start
-
-# Sleep forever
-exec tail -f /dev/null
+source /usr/lib/frr/frrcommon.sh
+/usr/lib/frr/watchfrr $(daemon_list)
index 748b5345a16ae39df5b5c0a13f5a8adf0a56adca..303a33fe4ac16c7aae28cc62f1b2d0a45723953f 100644 (file)
@@ -39,5 +39,19 @@ COPY --from=centos-7-builder /rpmbuild/RPMS/ /pkgs/rpm/
 
 RUN yum install -y /pkgs/rpm/*/*.rpm \
     && rm -rf /pkgs
+
+# Own the config / PID files
+RUN mkdir -p /var/run/frr
+RUN chown -R frr:frr /etc/frr /var/run/frr
+
+# Add tini because no CentOS7 package
+ENV TINI_VERSION v0.19.0
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /sbin/tini
+RUN chmod +x /sbin/tini
+
+# Simple init manager for reaping processes and forwarding signals
+ENTRYPOINT ["/sbin/tini", "--"]
+
+# Default CMD starts watchfrr
 COPY docker/centos-7/docker-start /usr/lib/frr/docker-start
-CMD [ "/usr/lib/frr/docker-start" ]
+CMD ["/usr/lib/frr/docker-start"]
index a3913245b6c886f887ef3008bf47f995dca7cee7..d954142ab983cb3cf2078ea8198ac188358c64ef 100755 (executable)
@@ -1,12 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
-set -e
-
-##
-# Change owner for docker volume mount
-##
-chown -R frr:frr /etc/frr
-/usr/lib/frr/frrinit.sh start
-
-# Sleep forever
-exec tail -f /dev/null
+source /usr/lib/frr/frrcommon.sh
+/usr/lib/frr/watchfrr $(daemon_list)
index e273be055b1c17a449f06937aaea54fa39968afc..8a0c28e13bca013c24050412e5ac831581fbf57c 100644 (file)
@@ -40,5 +40,19 @@ COPY --from=centos-8-builder /rpmbuild/RPMS/ /pkgs/rpm/
 
 RUN yum install -y /pkgs/rpm/*/*.rpm \
     && rm -rf /pkgs
+
+# Own the config / PID files
+RUN mkdir -p /var/run/frr
+RUN chown -R frr:frr /etc/frr /var/run/frr
+
+# Add tini because no CentOS8 package
+ENV TINI_VERSION v0.19.0
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /sbin/tini
+RUN chmod +x /sbin/tini
+
+# Simple init manager for reaping processes and forwarding signals
+ENTRYPOINT ["/sbin/tini", "--"]
+
+# Default CMD starts watchfrr
 COPY docker/centos-8/docker-start /usr/lib/frr/docker-start
-CMD [ "/usr/lib/frr/docker-start" ]
+CMD ["/usr/lib/frr/docker-start"]
index 935b22209e45f3bcc4291e390386b190da83a768..d954142ab983cb3cf2078ea8198ac188358c64ef 100755 (executable)
@@ -1,9 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
-set -e
-
-chown -R frr:frr /etc/frr
-/usr/lib/frr/frrinit.sh start
-
-# Sleep forever
-exec tail -f /dev/null
+source /usr/lib/frr/frrcommon.sh
+/usr/lib/frr/watchfrr $(daemon_list)
index cc9217f10342a376a3040e33752652b4d1a705f4..7476e5fe3e7b5239f29b03055d473d78b0cf00be 100644 (file)
@@ -6,8 +6,8 @@ ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
 
 RUN apt-get update && \
     apt-get install -y libpcre3-dev apt-transport-https ca-certificates curl wget logrotate \
-    libc-ares2 libjson-c3 vim procps libreadline7 gnupg2 lsb-release apt-utils && \
-    rm -rf /var/lib/apt/lists/*
+    libc-ares2 libjson-c3 vim procps libreadline7 gnupg2 lsb-release apt-utils \
+    tini && rm -rf /var/lib/apt/lists/*
 
 RUN curl -s https://deb.frrouting.org/frr/keys.asc | apt-key add -
 RUN echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) frr-stable | tee -a /etc/apt/sources.list.d/frr.list
@@ -16,5 +16,13 @@ RUN apt-get update && \
     apt-get install -y frr frr-pythontools && \
     rm -rf /var/lib/apt/lists/*
 
-ADD docker-start /usr/sbin/docker-start
-CMD ["/usr/sbin/docker-start"]
+# Own the config / PID files
+RUN mkdir -p /var/run/frr
+RUN chown -R frr:frr /etc/frr /var/run/frr
+
+# Simple init manager for reaping processes and forwarding signals
+ENTRYPOINT ["/usr/bin/tini", "--"]
+
+# Default CMD starts watchfrr
+COPY docker-start /usr/lib/frr/docker-start
+CMD ["/usr/lib/frr/docker-start"]
index a0f31f5ac52217fd4ae5ca6524b497f3b8c8ca0c..d954142ab983cb3cf2078ea8198ac188358c64ef 100755 (executable)
@@ -1,12 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
-set -e
-
-##
-# For volume mounts...
-##
-chown -R frr:frr /etc/frr
-/etc/init.d/frr start
-
-# Sleep forever
-exec tail -f /dev/null
+source /usr/lib/frr/frrcommon.sh
+/usr/lib/frr/watchfrr $(daemon_list)