diff --git a/plugins/dynamix.docker.manager/DockerSettings.page b/plugins/dynamix.docker.manager/DockerSettings.page
index 2fcff4283..b4eda8e67 100644
--- a/plugins/dynamix.docker.manager/DockerSettings.page
+++ b/plugins/dynamix.docker.manager/DockerSettings.page
@@ -128,7 +128,7 @@ Enable Docker:
> Once started, Docker will always automatically start after the array has been started.
-
+
Docker vdisk size:
: GB
@@ -148,7 +148,24 @@ Docker storage location:
> You must specify an image file for Docker. The system will automatically create this file when the Docker service is first started.
+>
+> It is recommended to create this image file outside the array, e.g. on the Cache pool. For best performance SSD devices are preferred.
+Default appdata storage location:
+:
+
+ Modify with caution: unable to validate path until Array is Started
+
+ Path does not exist
+
+
+> You can specify a folder to automatically generate and store subfolders containing configuration files for each Docker app (via the /config mapped volume).
+>
+> It is recommended to create this folder outside the array, e.g. on the Cache pool. For best performance SSD devices are preferred.
+>
+> Only used when adding new Docker apps. Editing existing Docker apps will not be affected by this setting.
+
+
Docker LOG rotation:
:
+> Specifies the maximum LOG size. When exceeded LOG rotation will occur.
+
Docker LOG number of files:
:
+> Specifies the number of LOG files when LOG rotation is done.
+
User defined networks:
:
-
-
-Docker version:
-: $arrInfo = $docker->getInfo(); echo $arrInfo['Version']?>
-
-> This is the docker version.
-
-Docker storage location:
-: =$dockercfg['DOCKER_IMAGE_FILE']?>
-
-> This is the docker volume.
-
-Docker LOG rotation:
-: =$dockercfg['DOCKER_LOG_ROTATION']=='yes'?'Enabled':'Disabled'?>
-
-> By default a single unlimited LOG file is created. Otherwise LOG file size and number of files are limited when LOG rotation is enabled.
-
-User defined networks:
-: =ucfirst($dockercfg['DOCKER_USER_NETWORKS']??'remove').'d'?>
-
-> Shows whether user defined networks are removed or preserved from Docker. When preserved user defined networks become available in the *Network type* dropdown list of containers.
-
-
-
-
-Default appdata storage location:
-:
-
- Modify with caution: unable to validate path until Array is Started
-
- Path does not exist
-
-
-> You can specify a folder to automatically generate and store subfolders containing configuration files for each Docker app (via the /config mapped volume).
->
-> Only used when adding new Docker apps. Editing existing Docker apps will not be affected by this setting.
-
-
-
-
Template Authoring Mode:
:
-
**System created networks**
:
+> Any interface or VLAN with an IP address assigned to it will be by default included as custom network for Docker.
+>
+> The user can exclude an interface or VLAN when not required for Docker. E.g. when custom network creation is done.
+
$route):?>
$nnet = normalize($network);
@@ -261,7 +233,6 @@ $docker_dhcp = "DOCKER_DHCP_$nnet";
-
IPv4 custom network on interface =$network?> (optional):
$auto = $dockercfg[$docker_auto]!='no';
@@ -281,7 +252,7 @@ $docker_dhcp = "DOCKER_DHCP_$nnet";
}
?>
: >**Address:** =$address[$network]?>**Gateway:** =$gateway[$network]?>
- >**DHCP pool:**=$prefix?>.
+ =$dhcpDisabled?>>**DHCP pool:**=$prefix?>.
for ($b=$box; $b<=3; $b++) {
switch ($b) {
case 1: $step = $size/65536%256; break;
@@ -300,21 +271,14 @@ $docker_dhcp = "DOCKER_DHCP_$nnet";
echo "";
echo "";
?>
-
-IPv4 custom network on interface =$network?>:
-: **Address:** =$address[$network]?>**Gateway:** =$gateway[$network]?>**DHCP pool:** =$dockercfg[$docker_dhcp]?> (=pow(2,32-explode('/',$dockercfg[$docker_dhcp])[1])?> hosts)
-
-
+> Include (default) or exclude the above interfaces or VLANs as custom network for Docker.
+>
> Enter the pool range within each allocated subnet which is used for DHCPv4 assignments by Docker. E.g. 192.168.1.128/25
-
-> Pool range(s) assigned to DHCPv4 for Docker containers.
-
-
$route):?>
$nnet = normalize($network);
@@ -322,7 +286,6 @@ $docker_auto = "DOCKER_AUTO_$nnet";
$docker_dhcp6 = "DOCKER_DHCP6_$nnet";
?>
-
IPv6 custom network on interface =$network?> (optional):
$auto6 = $dockercfg[$docker_auto]!='no';
@@ -335,33 +298,27 @@ $docker_dhcp6 = "DOCKER_DHCP6_$nnet";
$mask_user = $dhcp6 ? explode('/',$dhcp6)[1] : $mask;
?>
: >**Address:** =$address6[$network]?>**Gateway:** =$gateway6[$network]?>
- >**DHCP pool:**=$net?>:
+ =$dhcpDisabled?>>**DHCP pool:**=$net?>:
echo "/";
echo "";
?>
-
-IPv6 custom network on interface =$network?>:
-: **Address:** =$address6[$network]?>**Gateway:** =$gateway6[$network]?>**DHCP pool:** =$dockercfg[$docker_dhcp6]?>
-
-
+> Include (default) or exclude the above interfaces or VLANs as custom network for Docker.
+>
> Enter the pool range within each allocated subnet which is used for DHCPv6 assignments by Docker. E.g. 2a02:abcd:9ef5:100:1::/72
-
-> Pool range(s) assigned to DHCPv6 for Docker containers.
-
-
-
**Custom created networks**
:
-
+> Interfaces and VLANs without an IP address assigned, can be included as custom network for Docker.
+> This allows creation of custom networks without participation of the host (unRAID).
+
$port = normalize($network);
@@ -374,25 +331,141 @@ if (!$vlan) {
if (strpos($key,'VLANID')!==false && $value==$vlan) {$protocol = $$eth[str_replace('VLANID','PROTOCOL',$key)] ?? 'ipv4'; break;}
}
}
-?>
-
-
list($subnet,$mask) = explode('/',$dockercfg["DOCKER_SUBNET_$port"]);
list($range,$size) = explode('/',$dockercfg["DOCKER_RANGE_$port"]);
$disabled = $subnet ? '':'disabled';
?>
-
+
+
IPv4 custom network on interface =$network?> (optional):
: class="check">
**Address:** >/
**Gateway:** " title="IPv4 address A.B.C.D"=$disabled?>>
**DHCP pool:** >/(=pow(2,32-($size?:25))?> hosts)
-
+
+
+
+> Include or exclude (default) the above interfaces or VLANs as custom network for Docker.
+>
+> Enter the pool range within each allocated subnet which is used for DHCPv4 assignments by Docker. E.g. 192.168.1.128/25
+
+
+
+
+$port = normalize($network);
+list($eth,$vlan) = explode('.',$network);
+$eth = str_replace(['bond','br'],'eth',$eth);
+if (!$vlan) {
+ $protocol = $$eth['PROTOCOL:0'] ?? 'ipv4';
+} else {
+ foreach ($$eth as $key => $value) {
+ if (strpos($key,'VLANID')!==false && $value==$vlan) {$protocol = $$eth[str_replace('VLANID','PROTOCOL',$key)] ?? 'ipv4'; break;}
+ }
+}
+list($subnet6,$mask6) = explode('/',$dockercfg["DOCKER_SUBNET6_$port"]);
+list($range6,$size6) = explode('/',$dockercfg["DOCKER_RANGE6_$port"]);
+$disabled = $subnet6 ? '':'disabled';
+?>
+
+
+IPv6 custom network on interface =$network?> (optional):
+: class="check">
+ **Address:**>/
+ **Gateway:**" title="IPv6 address nnnn:xxxx::yyyy"=$disabled?>>
+ **DHCP pool:**>/
+
+
+
+
+> Include or exclude (default) the above interfaces or VLANs as custom network for Docker.
+>
+> Enter the pool range within each allocated subnet which is used for DHCPv6 assignments by Docker. E.g. 2a02:abcd:9ef5:100:1::/72
+
+
+
+
+
+Docker version:
+: $arrInfo = $docker->getInfo(); echo $arrInfo['Version']?>
+
+> This is the Docker version.
+
+Docker storage location:
+: =$dockercfg['DOCKER_IMAGE_FILE']?>
+
+> This is the location of the Docker image.
+
+Default appdata storage location:
+: =$dockercfg['DOCKER_APP_CONFIG_PATH']?>
+
+> This is the storage location for Docker containers.
+
+
+Docker LOG rotation:
+: =$dockercfg['DOCKER_LOG_ROTATION']=='yes'?'Enabled':'Disabled'?>
+
+> By default a single unlimited LOG file is created. Otherwise LOG file size and number of files are limited when LOG rotation is enabled.
+
+User defined networks:
+: =ucfirst($dockercfg['DOCKER_USER_NETWORKS']??'remove').'d'?>
+
+> Shows whether user defined networks are removed or preserved from Docker. When preserved user defined networks become available in the *Network type* dropdown list of containers.
+
+**System created networks**
+:
+
+> Lists the number of system created networks which are available as custom network for Docker.
+
+ $route):?>
+
+$nnet = normalize($network);
+$docker_dhcp = "DOCKER_DHCP_$nnet";
+?>
+
+
+IPv4 custom network on interface =$network?>:
+: **Address:** =$address[$network]?>**Gateway:** =$gateway[$network]?>**DHCP pool:** =$dockercfg[$docker_dhcp]?> (=pow(2,32-explode('/',$dockercfg[$docker_dhcp])[1])?> hosts)
+
+
+
+ $route):?>
+
+$nnet = normalize($network);
+$docker_dhcp6 = "DOCKER_DHCP6_$nnet";
+?>
+
+
+IPv6 custom network on interface =$network?>:
+: **Address:** =$address6[$network]?>**Gateway:** =$gateway6[$network]?>**DHCP pool:** =$dockercfg[$docker_dhcp6]?>
+
+
+
+
+**Custom created networks**
+:
+
+> Lists the number of user created networks which are available as custom network for Docker.
+
+
+
+$port = normalize($network);
+list($eth,$vlan) = explode('.',$network);
+$eth = str_replace(['bond','br'],'eth',$eth);
+if (!$vlan) {
+ $protocol = $$eth['PROTOCOL:0'] ?? 'ipv4';
+} else {
+ foreach ($$eth as $key => $value) {
+ if (strpos($key,'VLANID')!==false && $value==$vlan) {$protocol = $$eth[str_replace('VLANID','PROTOCOL',$key)] ?? 'ipv4'; break;}
+ }
+}
+list($subnet,$mask) = explode('/',$dockercfg["DOCKER_SUBNET_$port"]);
+list($range,$size) = explode('/',$dockercfg["DOCKER_RANGE_$port"]);
+?>
+
IPv4 custom network on interface =$network?>:
: **Address:** =$subnet?>/=$mask?>**Gateway:** =$dockercfg["DOCKER_GATEWAY_$port"]?>**DHCP pool:** =$range?>/=$size?> (=pow(2,32-($size?:25))?> hosts)
-
@@ -407,28 +480,17 @@ if (!$vlan) {
if (strpos($key,'VLANID')!==false && $value==$vlan) {$protocol = $$eth[str_replace('VLANID','PROTOCOL',$key)] ?? 'ipv4'; break;}
}
}
-?>
-
-
list($subnet6,$mask6) = explode('/',$dockercfg["DOCKER_SUBNET6_$port"]);
list($range6,$size6) = explode('/',$dockercfg["DOCKER_RANGE6_$port"]);
-$disabled = $subnet6 ? '':'disabled';
?>
-
-IPv6 custom network on interface =$network?> (optional):
-: class="check">
- **Address:**>/
- **Gateway:**" title="IPv6 address nnnn:xxxx::yyyy"=$disabled?>>
- **DHCP pool:**>/
-
-
+
IPv6 custom network on interface =$network?>:
: **Address:** =$subnet6?>/=$mask6?>**Gateway:** =$dockercfg["DOCKER_GATEWAY6_$port"]?>**DHCP pool:** =$range6?>/=$size6?>
-