mirror of
https://github.com/unraid/webgui.git
synced 2026-05-08 05:12:14 -05:00
Minor improvements (#1)
* few changes, please test * Change weird formatting * Another formatting change * Fix for `container:` networks * Hide IPs/Ports when container is not running * WebUI fix - generate WebUI links correctly - don't show WebUI from containers which use a `container:` network
This commit is contained in:
@@ -182,3 +182,4 @@ window.onunload = function(){
|
|||||||
dockerload.stop();
|
dockerload.stop();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ class DockerTemplates {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getAllInfo($reload=false,$com=true,$communityApplications=false) {
|
public function getAllInfo($reload=false,$com=true,$communityApplications=false) {
|
||||||
global $dockerManPaths, $host;
|
global $driver, $dockerManPaths, $host;
|
||||||
$DockerClient = new DockerClient();
|
$DockerClient = new DockerClient();
|
||||||
$DockerUpdate = new DockerUpdate();
|
$DockerUpdate = new DockerUpdate();
|
||||||
//$DockerUpdate->verbose = $this->verbose;
|
//$DockerUpdate->verbose = $this->verbose;
|
||||||
@@ -321,8 +321,18 @@ class DockerTemplates {
|
|||||||
// non-templated webui, user specified
|
// non-templated webui, user specified
|
||||||
$tmp['url'] = $webui;
|
$tmp['url'] = $webui;
|
||||||
} else {
|
} else {
|
||||||
$ip = ($ct['NetworkMode']=='host'||!is_null(_var($port,'PublicPort'))) ? $host : _var($port,'IP');
|
if ($ct['NetworkMode']=='host') {
|
||||||
|
$ip = $host;
|
||||||
|
} elseif ($driver[$ct['NetworkMode']]=='ipvlan' || $driver[$ct['NetworkMode']]=='macvlan') {
|
||||||
|
$ip = reset($ct['Networks'])['IPAddress'];
|
||||||
|
} elseif (!is_null(_var($port,'PublicPort'))) {
|
||||||
|
$ip = $host;
|
||||||
|
} else {
|
||||||
|
$ip = _var($port,'IP');
|
||||||
|
}
|
||||||
$tmp['url'] = $ip ? (strpos($tmp['url'],$ip)!==false ? $tmp['url'] : $this->getControlURL($ct, $ip, $tmp['url'])) : $tmp['url'];
|
$tmp['url'] = $ip ? (strpos($tmp['url'],$ip)!==false ? $tmp['url'] : $this->getControlURL($ct, $ip, $tmp['url'])) : $tmp['url'];
|
||||||
|
if (strpos($ct['NetworkMode'], 'container:') === 0)
|
||||||
|
$tmp['url'] = '';
|
||||||
}
|
}
|
||||||
if ( ($tmp['shell'] ?? false) == false )
|
if ( ($tmp['shell'] ?? false) == false )
|
||||||
$tmp['shell'] = $this->getTemplateValue($image, 'Shell');
|
$tmp['shell'] = $this->getTemplateValue($image, 'Shell');
|
||||||
@@ -928,32 +938,38 @@ class DockerClient {
|
|||||||
$c['Ports'] = [];
|
$c['Ports'] = [];
|
||||||
$c['Networks'] = [];
|
$c['Networks'] = [];
|
||||||
if ($id) $c['NetworkMode'] = $net.str_replace('/',':',DockerUtil::ctMap($id)?:'/???');
|
if ($id) $c['NetworkMode'] = $net.str_replace('/',':',DockerUtil::ctMap($id)?:'/???');
|
||||||
if (isset($driver[$c['NetworkMode']])) {
|
if ($info['State']['Running']) {
|
||||||
if ($driver[$c['NetworkMode']]=='bridge') {
|
if (isset($driver[$c['NetworkMode']])) {
|
||||||
$ports = &$info['HostConfig']['PortBindings'];
|
if ($driver[$c['NetworkMode']]=='bridge') {
|
||||||
} else {
|
$ports = &$info['HostConfig']['PortBindings'];
|
||||||
|
} elseif ($driver[$c['NetworkMode']]=='host') {
|
||||||
|
$c['Ports']['host'] = ['host' => ''];
|
||||||
|
} elseif ($driver[$c['NetworkMode']]=='ipvlan' || $driver[$c['NetworkMode']]=='macvlan') {
|
||||||
|
$c['Ports']['vlan'] = ['vlan' => ''];
|
||||||
|
} else {
|
||||||
|
$ports = &$info['Config']['ExposedPorts'];
|
||||||
|
}
|
||||||
|
} else if (!$id) {
|
||||||
|
$c['NetworkMode'] = DockerUtil::ctMap($c['NetworkMode']);
|
||||||
$ports = &$info['Config']['ExposedPorts'];
|
$ports = &$info['Config']['ExposedPorts'];
|
||||||
|
foreach($ct['NetworkSettings']['Networks'] as $netName => $netVals) {
|
||||||
|
$i = $c['NetworkMode']=='host' ? $host : $netVals['IPAddress'];
|
||||||
|
$c['Networks'][$netName] = [ 'IPAddress' => $i ];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (!$id) {
|
$ip = $c['NetworkMode']=='host' ? $host : $ct['NetworkSettings']['Networks'][$c['NetworkMode']]['IPAddress'] ?? null;
|
||||||
$c['NetworkMode'] = DockerUtil::ctMap($c['NetworkMode']);
|
$c['Networks'][$c['NetworkMode']] = [ 'IPAddress' => $ip ];
|
||||||
$ports = &$info['Config']['ExposedPorts'];
|
$ports = (isset($ports) && is_array($ports)) ? $ports : [];
|
||||||
foreach($ct['NetworkSettings']['Networks'] as $netName => $netVals) {
|
foreach ($ports as $port => $value) {
|
||||||
$i = $c['NetworkMode']=='host' ? $host : $netVals['IPAddress'];
|
[$PrivatePort, $Type] = array_pad(explode('/', $port),2,'');
|
||||||
$c['Networks'][$netName] = [ 'IPAddress' => $i ];
|
$PublicPort = $info['HostConfig']['PortBindings']["$port"][0]['HostPort'] ?: null;
|
||||||
|
$nat = ($driver[$c['NetworkMode']]=='bridge');
|
||||||
|
if (array_key_exists($PrivatePort, $c['Ports']) && $Type != $c['Ports'][$PrivatePort]['Type'])
|
||||||
|
$Type = $c['Ports'][$PrivatePort]['Type'] . '/' . $Type;
|
||||||
|
$c['Ports'][$PrivatePort] = ['IP' => $ip, 'PrivatePort' => $PrivatePort, 'PublicPort' => $PublicPort, 'NAT' => $nat, 'Type' => $Type, 'Driver' => $driver[$c['NetworkMode']]];
|
||||||
}
|
}
|
||||||
|
ksort($c['Ports']);
|
||||||
}
|
}
|
||||||
$ip = $c['NetworkMode']=='host' ? $host : $ct['NetworkSettings']['Networks'][$c['NetworkMode']]['IPAddress'] ?? null;
|
|
||||||
$c['Networks'][$c['NetworkMode']] = [ 'IPAddress' => $ip ];
|
|
||||||
$ports = (isset($ports) && is_array($ports)) ? $ports : [];
|
|
||||||
foreach ($ports as $port => $value) {
|
|
||||||
[$PrivatePort, $Type] = array_pad(explode('/', $port),2,'');
|
|
||||||
$PublicPort = $info['HostConfig']['PortBindings']["$port"][0]['HostPort'] ?: null;
|
|
||||||
$nat = ($driver[$c['NetworkMode']]=='bridge');
|
|
||||||
if (array_key_exists($PrivatePort, $c['Ports']) && $Type != $c['Ports'][$PrivatePort]['Type'])
|
|
||||||
$Type = $c['Ports'][$PrivatePort]['Type'] . '/' . $Type;
|
|
||||||
$c['Ports'][$PrivatePort] = ['IP' => $ip, 'PrivatePort' => $PrivatePort, 'PublicPort' => $PublicPort, 'NAT' => $nat, 'Type' => $Type, 'Driver' => $driver[$c['NetworkMode']]];
|
|
||||||
}
|
|
||||||
ksort($c['Ports']);
|
|
||||||
$this::$containersCache[] = $c;
|
$this::$containersCache[] = $c;
|
||||||
}
|
}
|
||||||
array_multisort(array_column($this::$containersCache,'Name'), SORT_NATURAL|SORT_FLAG_CASE, $this::$containersCache);
|
array_multisort(array_column($this::$containersCache,'Name'), SORT_NATURAL|SORT_FLAG_CASE, $this::$containersCache);
|
||||||
@@ -1101,3 +1117,4 @@ class DockerUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|||||||
@@ -96,11 +96,23 @@ foreach ($containers as $ct) {
|
|||||||
$ports_internal = [];
|
$ports_internal = [];
|
||||||
$ports_external = [];
|
$ports_external = [];
|
||||||
foreach ($ct['Ports'] as $port) {
|
foreach ($ct['Ports'] as $port) {
|
||||||
|
if (strpos($ct['NetworkMode'], 'container:') === 0)
|
||||||
|
break;
|
||||||
if (_var($port,'PublicPort') && _var($port,'Driver') == 'bridge')
|
if (_var($port,'PublicPort') && _var($port,'Driver') == 'bridge')
|
||||||
$ports_external[] = sprintf('%s:%s', $host, strtoupper(_var($port,'PublicPort')));
|
$ports_external[] = sprintf('%s:%s', $host, strtoupper(_var($port,'PublicPort')));
|
||||||
if (_var($port,'Driver') == 'ipvlan' || _var($port,'Driver') == 'host')
|
if (isset($ct['Networks']['host'])) {
|
||||||
$ports_external[] = sprintf('%s:%s', _var($port,'IP'), strtoupper(_var($port,'PrivatePort')));
|
$ports_external[] = sprintf('%s', $netVals['IPAddress']);
|
||||||
$ports_internal[] = sprintf('%s:%s', _var($port,'PrivatePort'), strtoupper(_var($port,'Type')));
|
$ports_internal[] = sprintf('%s', 'all');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (isset($ct['Ports']['vlan'])) {
|
||||||
|
$ports_external[] = sprintf('%s', $netVals['IPAddress']);
|
||||||
|
$ports_internal[] = sprintf('%s', 'all');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((!isset($ct['Networks']['host'])) || (!isset($ct['Networks']['vlan']))) {
|
||||||
|
$ports_internal[] = sprintf('%s:%s', _var($port,'PrivatePort'), strtoupper(_var($port,'Type')));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$paths = [];
|
$paths = [];
|
||||||
$ct['Volumes'] = is_array($ct['Volumes']) ? $ct['Volumes'] : [];
|
$ct['Volumes'] = is_array($ct['Volumes']) ? $ct['Volumes'] : [];
|
||||||
@@ -168,3 +180,4 @@ foreach ($images as $image) {
|
|||||||
}
|
}
|
||||||
echo "\0".implode($docker)."\0".(pgrep('rc.docker')!==false ? 1:0);
|
echo "\0".implode($docker)."\0".(pgrep('rc.docker')!==false ? 1:0);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user