Преглед изворни кода

Bump to Firebird 3.0.4 add output /var/log/firebird/*.log to stdout add healthcheck

Vadim Surkov пре 6 година
родитељ
комит
66b9324ad9
3 измењених фајлова са 56 додато и 26 уклоњено
  1. 11 8
      Dockerfile
  2. 39 18
      docker-entrypoint.sh
  3. 6 0
      healthcheck.sh

+ 11 - 8
Dockerfile

@@ -1,20 +1,23 @@
-FROM centos:7.5.1804
+FROM centos:7.6.1810
 ENV LANG="en_US.UTF-8"
+VOLUME /data
 ENTRYPOINT ["/docker-entrypoint.sh"]
 EXPOSE 3050
-COPY firebird.conf /etc/firebird/firebird.conf
-COPY docker-entrypoint.sh /docker-entrypoint.sh
+HEALTHCHECK --start-period=30s --interval=15s --timeout=5s --retries=2 CMD /healthcheck.sh
 RUN set -x && \
     yum install -y epel-release && \
     curl https://copr.fedorainfracloud.org/coprs/makowski/firebird/repo/epel-7/makowski-firebird-epel-7.repo > /etc/yum.repos.d/makowski-firebird-epel-7.repo && \
-    yum install -y firebird icu && \
-    mkdir /var/run/firebird && \
+    yum install -y firebird-3.0.4.33054 icu && \
+    mkdir -p /var/run/firebird && \
     chown firebird. /var/run/firebird && \
-    mkdir /data && \
     chown firebird. /data && \
     yum clean all && \
-    chmod +x /docker-entrypoint.sh && \
     ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime
-VOLUME /data
+COPY firebird.conf /etc/firebird/firebird.conf
+COPY docker-entrypoint.sh /docker-entrypoint.sh
+COPY healthcheck.sh /healthcheck.sh
+RUN set -x && \
+    chmod +x /docker-entrypoint.sh && \
+    chmod +x /healthcheck.sh
 CMD ["/usr/sbin/fbguard"]
 

+ 39 - 18
docker-entrypoint.sh

@@ -1,13 +1,28 @@
 #!/usr/bin/env bash
 set -e
 
+function log_to_dockerout {
+    cd /var/log/firebird
+    while true 
+    do
+      for i in $(ls *.log)
+      do
+          if [ -z "$(pgrep -f ${i})" ] ; then 
+             echo Processing ${i} > /var/log/dockerout
+             tail -f /var/log/firebird/$i 2> /dev/null | while read fread; do echo "[${i}]: ${fread}" >> /var/log/dockerout; :> /var/log/firebird/$i; done &
+          fi
+      done
+      sleep 10
+    done
+}
+
 function sec_init
 {
 
-cat <<EOF | isql-fb security.db
-create or alter user SYSDBA password '$_SYSDBA_PWD';
-commit;
-quit;
+    cat <<EOF | isql-fb security.db
+    create or alter user SYSDBA password '$_SYSDBA_PWD';
+    commit;
+    quit;
 EOF
 
 if [ -f /run/secrets/FB3_USER_NAME ] && [ -f /run/secrets/FB3_USER_PWD ]; then
@@ -22,12 +37,22 @@ fi
 
 }
 
-if [ -f /run/secrets/FB3_SYSDBA_PWD ]; then
-    _SYSDBA_PWD=$(cat /run/secrets/FB3_SYSDBA_PWD)
-else
-    _SYSDBA_PWD=$RANDOM$RANDOM
-    echo "Setting SYSDBA's random password: "$_SYSDBA_PWD
+function checkbase_init
+{
+    mktemp > /etc/firebird/check-database.conf
+    rm -f $(cat /etc/firebird/check-database.conf)
+    isql-fb << EOF
+    CREATE DATABASE "$(cat /etc/firebird/check-database.conf)";
+EOF
+
+}
+
+if [ ! -f /run/secrets/FB3_SYSDBA_PWD ]; then
+    mkdir -p /run/secrets
+    echo $RANDOM$RANDOM > /run/secrets/FB3_SYSDBA_PWD
+    echo "Setting SYSDBA's random password: "$( cat /run/secrets/FB3_SYSDBA_PWD )
 fi
+_SYSDBA_PWD=$(cat /run/secrets/FB3_SYSDBA_PWD)
 
 sed -i "s/^UserManager/#Tmp UserManager/" /etc/firebird/firebird.conf
 echo "UserManager = Legacy_UserManager" >>  /etc/firebird/firebird.conf
@@ -36,15 +61,11 @@ sed -i "s/UserManager = Legacy_UserManager//" /etc/firebird/firebird.conf
 sed -i "s/#Tmp UserManager/UserManager/" /etc/firebird/firebird.conf
 sec_init
 
-rm -f /var/log/firebird/firebird.log
-mkfifo /var/log/firebird/firebird.log
-tail -f /var/log/firebird/firebird.log &
-
-exec "$@"
-
-
-
-
+checkbase_init
 
+mkfifo /var/log/dockerout
+tail -f /var/log/dockerout &
 
+log_to_dockerout &
 
+exec "$@"

+ 6 - 0
healthcheck.sh

@@ -0,0 +1,6 @@
+#!/bin/bash
+
+isql-fb -user SYSDBA -password "$(cat /run/secrets/FB3_SYSDBA_PWD)" 127.0.0.1:$(cat /etc/firebird/check-database.conf) << "EOF" || exit 1
+SHOW DATABASE;
+EOF
+