diff --git a/plugins/dynamix.docker.manager/DockerContainers.page b/plugins/dynamix.docker.manager/DockerContainers.page index 491275dcb..4bf68a658 100644 --- a/plugins/dynamix.docker.manager/DockerContainers.page +++ b/plugins/dynamix.docker.manager/DockerContainers.page @@ -4,8 +4,8 @@ Cond="(pgrep('dockerd')!==false)" Markdown="false" --- $("#DOCKER_APP_CONFIG_PATH").fileTreeAttach(); diff --git a/plugins/dynamix.docker.manager/include/CreateDocker.php b/plugins/dynamix.docker.manager/include/CreateDocker.php index be2b51695..faea486c2 100644 --- a/plugins/dynamix.docker.manager/include/CreateDocker.php +++ b/plugins/dynamix.docker.manager/include/CreateDocker.php @@ -1,6 +1,6 @@ -$docroot = @$docroot ?: $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp'; +$docroot = $docroot ?: $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp'; ignore_user_abort(true); @@ -32,6 +32,10 @@ $DockerTemplates = new DockerTemplates(); $echo = function($m){ echo "
".print_r($m, true).""; }; +exec("docker network ls --filter driver='macvlan' --format='{{.Name}}'", $custom); +$subnet = ['bridge'=>'', 'host'=>'', 'none'=>'']; +foreach ($custom as $network) $subnet[$network] = exec("docker network inspect --format='{{range .IPAM.Config}}{{.Subnet}}{{end}}' $network"); + function stopContainer($name) { global $DockerClient; $waitID = mt_rand(); @@ -189,6 +193,7 @@ function postToXML($post, $setOwnership = false) { $xml->Repository = xml_encode(trim($post['contRepository'])); $xml->Registry = xml_encode(trim($post['contRegistry'])); $xml->Network = xml_encode($post['contNetwork']); + $xml->MyIP = xml_encode($post['contMyIP']); $xml->Privileged = (strtolower($post["contPrivileged"]) == 'on') ? 'true' : 'false'; $xml->Support = xml_encode($post['contSupport']); $xml->Overview = xml_encode($post['contOverview']); @@ -251,6 +256,7 @@ function xmlToVar($xml) { $out['Repository'] = xml_decode($xml->Repository); $out['Registry'] = xml_decode($xml->Registry); $out['Network'] = (isset($xml->Network)) ? xml_decode($xml->Network) : xml_decode($xml->Network['Default']); + $out['MyIP'] = isset($xml->MyIP) ? xml_decode($xml->MyIP) : ''; $out['Privileged'] = xml_decode($xml->Privileged); $out['Support'] = xml_decode($xml->Support); $out['Overview'] = stripslashes(xml_decode($xml->Overview)); @@ -362,6 +368,7 @@ function xmlToCommand($xml, $create_paths=false) { $cmdName = (strlen($xml['Name'])) ? '--name="'.$xml['Name'].'"' : ""; $cmdPrivileged = (strtolower($xml['Privileged']) == 'true') ? '--privileged="true"' : ""; $cmdNetwork = '--net="'.strtolower($xml['Network']).'"'; + $cmdMyIP = $xml['MyIP'] ? '--ip="'.$xml['MyIP'].'"' : ''; $Volumes = ['']; $Ports = ['']; $Variables = ['']; @@ -386,10 +393,10 @@ function xmlToCommand($xml, $create_paths=false) { } } elseif ($confType == 'port') { # Export ports as variable if Network is set to host - if (strtolower($xml['Network']) == 'host') { + if (preg_match('/^(host|eth[0-9]|br[0-9]|bond[0-9])/',strtolower($xml['Network']))) { $Variables[] = strtoupper(sprintf('"%s_PORT_%s"="%s"', $Mode, $containerConfig, $hostConfig)); # Export ports as port if Network is set to bridge - } elseif (strtolower($xml['Network']) == 'bridge') { + } elseif (strtolower($xml['Network'])== 'bridge') { $Ports[] = sprintf("%s:%s/%s", $hostConfig, $containerConfig, $Mode); # No export of ports if Network is set to none } @@ -399,9 +406,10 @@ function xmlToCommand($xml, $create_paths=false) { $Devices[] = '"'.$hostConfig.'"'; } } - $cmd = sprintf('/plugins/dynamix.docker.manager/scripts/docker create %s %s %s %s %s %s %s %s %s', + $cmd = sprintf('/plugins/dynamix.docker.manager/scripts/docker create %s %s %s %s %s %s %s %s %s %s', $cmdName, $cmdNetwork, + $cmdMyIP, $cmdPrivileged, implode(' -e ', $Variables), implode(' -p ', $Ports), @@ -1041,7 +1049,7 @@ $showAdditionalInfo = ''; } else { targetDiv.hide(); } - if (network==0 || network==1) { + if (network==0 || network==1 || network>2) { valueDiv.find('#dt2').text('Host Port:'); valueDiv.show(); } else { @@ -1355,13 +1363,20 @@ $showAdditionalInfo = '';
@@ -1519,6 +1534,20 @@ $showAdditionalInfo = '';