From ba704c7c90c839ed714bb7896f68c106abf74e4e Mon Sep 17 00:00:00 2001
From: kiddin9 <48883331+kiddin9@users.noreply.github.com>
Date: Fri, 20 Mar 2026 22:13:50 +0800
Subject: [PATCH] Update dockerman.patch
---
.github/diy/patches/dockerman.patch | 138 ++--------------------------
1 file changed, 8 insertions(+), 130 deletions(-)
diff --git a/.github/diy/patches/dockerman.patch b/.github/diy/patches/dockerman.patch
index 56866054..d0368dbb 100644
--- a/.github/diy/patches/dockerman.patch
+++ b/.github/diy/patches/dockerman.patch
@@ -1,133 +1,11 @@
---- a/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua
-+++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua
-@@ -37,7 +37,15 @@ local get_ports = function(d)
-
- if d.HostConfig and d.HostConfig.PortBindings then
- for inter, out in pairs(d.HostConfig.PortBindings) do
-- data = (data and (data .. "
") or "") .. out[1]["HostPort"] .. ":" .. inter
-+ if out[1] and out[1]["HostPort"] then
-+ local host_ip = ""
-+ if out[1].HostIp and out[1].HostIp ~= "" then
-+ host_ip = out[1].HostIp
-+ else
-+ host_ip = "*"
-+ end
-+ local line = host_ip .. ":" .. out[1]["HostPort"] .. ":" .. inter
-+ data = (data and (data .. "
") or "") .. line
- end
- end
-
-
---- a/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua
-+++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua
-@@ -67,17 +67,38 @@ function get_containers()
-
- if v.Ports and next(v.Ports) ~= nil then
- data[index]["_ports"] = nil
-- for _,v2 in ipairs(v.Ports) do
-- data[index]["_ports"] = (data[index]["_ports"] and (data[index]["_ports"] .. ", ") or "")
-- .. ((v2.PublicPort and v2.Type and v2.Type == "tcp") and ('') or "")
-- .. (v2.PublicPort and (v2.PublicPort .. ":") or "") .. (v2.PrivatePort and (v2.PrivatePort .."/") or "") .. (v2.Type and v2.Type or "")
-- .. ((v2.PublicPort and v2.Type and v2.Type == "tcp")and "" or "")
-+ for _, v2 in ipairs(v.Ports) do
-+ local port_string = ""
-+
-+ -- Add clickable link for TCP ports
-+ if v2.PublicPort and v2.Type == "tcp" then
-+ local url = (v2.IP and v2.IP ~= "" and v2.IP ~= "0.0.0.0" and v2.IP ~= "::")
-+ and ("'http://" .. (v2.IP:find(":") and ("[" .. v2.IP .. "]") or v2.IP) .. ":" .. v2.PublicPort .. "'")
-+ or ("(window.location.origin.match(/^(.+):\\\\d+$/) && window.location.origin.match(/^(.+):\\\\d+$/)[1] || window.location.origin) + ':" .. v2.PublicPort .. "'")
-+ port_string = ''
-+ end
-+
-+ -- Build display string: IP:PublicPort:PrivatePort/Type
-+ port_string = port_string .. (v2.IP and v2.IP ~= ""
-+ and v2.IP ~= "0.0.0.0" and v2.IP ~= "::" and (v2.IP .. ":") or "*:")
-+ .. (v2.PublicPort and (v2.PublicPort .. ":") or "")
-+ .. (v2.PrivatePort and (v2.PrivatePort .. "/") or "")
-+ .. (v2.Type or "")
-+ .. (v2.PublicPort and v2.Type == "tcp" and "" or "")
-+
-+ data[index]["_ports"] = (data[index]["_ports"] and (data[index]["_ports"] .. ", ") or "") .. port_string
- end
- end
-
- for ii,iv in ipairs(images) do
- if iv.Id == v.ImageID then
-- data[index]["_image"] = iv.RepoTags and iv.RepoTags[1] or (next(iv.RepoDigests) and (iv.RepoDigests[1]:gsub("(.-)@.+", "%1") .. ":<none>")) or ""
-+ if iv.RepoTags and iv.RepoTags[1] then
-+ data[index]["_image"] = iv.RepoTags[1]
-+ elseif iv.RepoDigests and iv.RepoDigests[1] then
-+ data[index]["_image"] = iv.RepoDigests[1]:gsub("(.-)@.+", "%1") .. ":"
-+ else
-+ data[index]["_image"] = ""
-+ end
- end
- end
-
-
---- a/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua
-+++ b/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua
-@@ -408,7 +408,14 @@ elseif cmd_line and cmd_line:match("^duplicate/[^/]+$") then
- if create_body.HostConfig.PortBindings and type(create_body.HostConfig.PortBindings) == "table" then
- default_config.publish = {}
- for k, v in pairs(create_body.HostConfig.PortBindings) do
-- table.insert( default_config.publish, v[1].HostPort..":"..k:match("^(%d+)/.+").."/"..k:match("^%d+/(.+)") )
-+ local host_ip = ""
-+ if v[1].HostIp and v[1].HostIp ~= "" then
-+ host_ip = v[1].HostIp .. ":"
-+ end
-+ local host_port = v[1].HostPort
-+ local container_port = k:match("^(%d+)/.+")
-+ local protocol = k:match("^%d+/(.+)")
-+ table.insert(default_config.publish, host_ip .. host_port .. ":" .. container_port .. "/" .. protocol)
- end
- end
-
-@@ -544,7 +551,7 @@ o.default = default_config.volume or nil
- local d_publish = s:option(DynamicList, "publish",
- translate("Exposed Ports(-p)"),
- translate("Publish container's port(s) to the host"))
--d_publish.placeholder = "2200:22/tcp"
-+d_publish.placeholder = "[192.168.1.0:]2200:22/tcp"
- d_publish.rmempty = true
- d_publish.default = default_config.publish or nil
-
-@@ -768,13 +775,22 @@ m.handle = function(self, state, data)
-
- tmp = data.publish or {}
- for i, v in ipairs(tmp) do
-- for v1 ,v2 in string.gmatch(v, "(%d+):([^%s]+)") do
-- local _,_,p= v2:find("^%d+/(%w+)")
-- if p == nil then
-- v2=v2..'/tcp'
-+ local ip, host_port, container_port = v:match("^([^:]+):(%d+):([^%s]+)$")
-+ if not container_port then
-+ host_port, container_port = v:match("^(%d+):([^%s]+)$")
-+ end
+--- /dev/null
++++ b/applications/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman
+@@ -0,0 +1,8 @@
++#!/bin/sh
+
-+ if container_port then
-+ if not container_port:match("^%d+/(%w+)$") then
-+ container_port = container_port .. "/tcp"
- end
-- portbindings[v2] = {{HostPort=v1}}
-- exposedports[v2] = {HostPort=v1}
-+ local binding = { HostPort = host_port }
-+ if ip then
-+ binding["HostIp"] = ip
-+ end
-+
-+ portbindings[container_port] = { binding }
-+ exposedports[container_port] = {HostPort = host_port}
- end
- end
-
---- a/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman
-+++ b/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman
-@@ -4,3 +4,6 @@ uci -q batch <<-EOF >/dev/null
- set uhttpd.main.script_timeout="360"
- commit uhttpd
- EOF
++uci -q batch <<-EOF >/dev/null
++ set uhttpd.main.script_timeout="360"
++ commit uhttpd
++EOF
+
+/etc/init.d/dockerd restart
-+