import java.util.Map;
import java.util.TimeZone;
+import com.gitblit.utils.ContainerDetector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
logTimezone("App timezone: ", getTimezone());
logger.info("JVM locale : " + Locale.getDefault());
logger.info("App locale : " + (getLocale() == null ? "<client>" : getLocale()));
+ ContainerDetector.report(logger, true);
return this;
}
--- /dev/null
+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);
+
+ }
+
+ }
+}