diff --git a/emhttp/plugins/dynamix.docker.manager/include/DockerClient.php b/emhttp/plugins/dynamix.docker.manager/include/DockerClient.php index 2af612e98..f380d6121 100644 --- a/emhttp/plugins/dynamix.docker.manager/include/DockerClient.php +++ b/emhttp/plugins/dynamix.docker.manager/include/DockerClient.php @@ -945,16 +945,21 @@ class DockerClient { } elseif ($driver[$c['NetworkMode']]=='host') { $c['Ports']['host'] = ['host' => '']; } elseif ($driver[$c['NetworkMode']]=='ipvlan' || $driver[$c['NetworkMode']]=='macvlan') { - $c['Ports']['vlan'] = ['vlan' => '']; + $i = $ct['NetworkSettings']['Networks'][$c['NetworkMode']]['IPAddress']; + $c['Ports']['vlan'] = ["$i" => $i]; } else { $ports = &$info['Config']['ExposedPorts']; } } else if (!$id) { $c['NetworkMode'] = DockerUtil::ctMap($c['NetworkMode']); $ports = &$info['Config']['ExposedPorts']; - foreach($ct['NetworkSettings']['Networks'] as $netName => $netVals) { - $i = $c['NetworkMode']=='host' ? $host : $netVals['IPAddress']; - $c['Networks'][$netName] = [ 'IPAddress' => $i ]; + } + foreach($ct['NetworkSettings']['Networks'] as $netName => $netVals) { + $i = $c['NetworkMode']=='host' ? $host : $netVals['IPAddress']; + $c['Networks'][$netName] = [ 'IPAddress' => $i ]; + if ($driver[$netName]=='ipvlan' || $driver[$netName]=='macvlan') { + if (!isset($c['Ports']['vlan'])) $c['Ports']['vlan'] = []; + $c['Ports']['vlan']["$i"] = $i; } } $ip = $c['NetworkMode']=='host' ? $host : $ct['NetworkSettings']['Networks'][$c['NetworkMode']]['IPAddress'] ?? null; diff --git a/emhttp/plugins/dynamix.docker.manager/include/DockerContainers.php b/emhttp/plugins/dynamix.docker.manager/include/DockerContainers.php index 6bca882f0..c0b23c09b 100644 --- a/emhttp/plugins/dynamix.docker.manager/include/DockerContainers.php +++ b/emhttp/plugins/dynamix.docker.manager/include/DockerContainers.php @@ -89,29 +89,27 @@ foreach ($containers as $ct) { $wait = var_split($autostart[array_search($name,$names)]??'',1); $networks = []; $network_ips = []; + $ports_internal = []; + $ports_external = []; + if (isset($ct['Ports']['vlan'])) { + foreach ($ct['Ports']['vlan'] as $i) + $ports_external[] = sprintf('%s', $i); + $ports_internal[0] = sprintf('%s', 'all'); + } foreach($ct['Networks'] as $netName => $netVals) { $networks[] = $netName; $network_ips[] = $netVals['IPAddress']; - } - $ports_internal = []; - $ports_external = []; - foreach ($ct['Ports'] as $port) { - if (strpos($ct['NetworkMode'], 'container:') === 0) - break; - if (_var($port,'PublicPort') && _var($port,'Driver') == 'bridge') - $ports_external[] = sprintf('%s:%s', $host, strtoupper(_var($port,'PublicPort'))); + if (isset($ct['Networks']['host'])) { $ports_external[] = sprintf('%s', $netVals['IPAddress']); - $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'))); + $ports_internal[0] = sprintf('%s', 'all'); + } else if (!isset($ct['Ports']['vlan']) || strpos($ct['NetworkMode'], 'container:') != 0) { + foreach ($ct['Ports'] as $port) { + if (_var($port,'PublicPort') && _var($port,'Driver') == 'bridge') + $ports_external[] = sprintf('%s:%s', $host, strtoupper(_var($port,'PublicPort'))); + if ((!isset($ct['Networks']['host'])) || (!isset($ct['Networks']['vlan']))) + $ports_internal[] = sprintf('%s:%s', _var($port,'PrivatePort'), strtoupper(_var($port,'Type'))); + } } } $paths = [];