diff --git a/Dockerfile b/Dockerfile
index 3b6bc4c87e618b3b099758e745f492f2cfc60145..3815c9f9a99fe786b468f6932328f6876b1ae995 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -70,6 +70,7 @@ RUN chown -R plausibleuser:plausibleuser /app
 USER plausibleuser
 WORKDIR /app
 ENV GEONAMES_SOURCE_FILE=/app/lib/plausible-0.0.1/priv/geonames.csv
+ENV LISTEN_IP=0.0.0.0
 ENTRYPOINT ["/entrypoint.sh"]
 EXPOSE 8000
 CMD ["run"]
diff --git a/config/runtime.exs b/config/runtime.exs
index 7ea33f73a3d96725d2dd056d40a132805488a3f5..46372f0ace49f74f263f24001ed7922359518cfb 100644
--- a/config/runtime.exs
+++ b/config/runtime.exs
@@ -8,16 +8,18 @@ end
 config_dir = System.get_env("CONFIG_DIR", "/run/secrets")
 
 # Listen IP supports IPv4 and IPv6 addresses.
-listen_ip = (
-  str = get_var_from_path_or_env(config_dir, "LISTEN_IP") || "0.0.0.0"
-  case :inet.parse_address(String.to_charlist(str)) do
-    {:ok, ip_addr} ->
-      ip_addr
-
-    {:error, reason} ->
-      raise "Invalid LISTEN_IP '#{str}' error: #{inspect(reason)}"
-  end
-)
+listen_ip =
+  (
+    str = get_var_from_path_or_env(config_dir, "LISTEN_IP") || "127.0.0.1"
+
+    case :inet.parse_address(String.to_charlist(str)) do
+      {:ok, ip_addr} ->
+        ip_addr
+
+      {:error, reason} ->
+        raise "Invalid LISTEN_IP '#{str}' error: #{inspect(reason)}"
+    end
+  )
 
 # System.get_env does not accept a non string default
 port = get_var_from_path_or_env(config_dir, "PORT") || 8000