summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/gitblit/manager/RuntimeManager.java2
-rw-r--r--src/main/java/com/gitblit/utils/ContainerDetector.java74
2 files changed, 76 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/manager/RuntimeManager.java b/src/main/java/com/gitblit/manager/RuntimeManager.java
index 18d6b9c2..f0cca514 100644
--- a/src/main/java/com/gitblit/manager/RuntimeManager.java
+++ b/src/main/java/com/gitblit/manager/RuntimeManager.java
@@ -22,6 +22,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
+import com.gitblit.utils.ContainerDetector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,6 +79,7 @@ public class RuntimeManager implements IRuntimeManager {
logTimezone("App timezone: ", getTimezone());
logger.info("JVM locale : " + Locale.getDefault());
logger.info("App locale : " + (getLocale() == null ? "<client>" : getLocale()));
+ ContainerDetector.report(logger, true);
return this;
}
diff --git a/src/main/java/com/gitblit/utils/ContainerDetector.java b/src/main/java/com/gitblit/utils/ContainerDetector.java
new file mode 100644
index 00000000..8e4a071a
--- /dev/null
+++ b/src/main/java/com/gitblit/utils/ContainerDetector.java
@@ -0,0 +1,74 @@
+package com.gitblit.utils;
+
+import org.slf4j.Logger;
+
+import java.io.File;
+
+/**
+ * The ContainerDetector tries to detect if the Gitblit instance
+ * is running in a container, or directly on the (virtualized) OS.
+ */
+public class ContainerDetector
+{
+ private static Boolean inContainer;
+ private static String detectedType = "";
+
+ /**
+ * Detect if this instance in running inside a container.
+ *
+ * @return true - if a container could be detected
+ * false - otherwise
+ */
+ public static boolean detect()
+ {
+ if (inContainer == null) {
+ File proc = new File("/proc/1/cgroup");
+ if (! proc.exists()) inContainer = Boolean.FALSE;
+ else {
+ String cgroups = FileUtils.readContent(proc, null);
+ if (cgroups.contains("/docker")) {
+ inContainer = Boolean.TRUE;
+ detectedType = "Docker container";
+ }
+ else if (cgroups.contains("/ecs")) {
+ inContainer = Boolean.TRUE;
+ detectedType = "ECS container";
+ }
+ else if (cgroups.contains("/kubepod") || cgroups.contains("/kubepods")) {
+ inContainer = Boolean.TRUE;
+ detectedType = "Kubernetes pod";
+ }
+ }
+
+ // Finally, if we still haven't found proof, it is probably not a container
+ if (inContainer == null) inContainer = Boolean.FALSE;
+ }
+
+ return inContainer;
+ }
+
+
+ /**
+ * Report to some output if a container was detected.
+ *
+ */
+ public static void report(Logger logger, boolean onlyIfInContainer)
+ {
+ if (detect()) {
+ String msg = "Running in a " + detectedType;
+ if (logger == null) {
+ System.out.println(msg);
+ }
+ else logger.info(msg);
+ }
+ else if (!onlyIfInContainer) {
+ String msg = "Not detected to be running in a container";
+ if (logger == null) {
+ System.out.println(msg);
+ }
+ else logger.info(msg);
+
+ }
+
+ }
+}