Modules/businessdev.ALbuild.Containers/Private/Get-BcContainerRunArguments.ps1
|
function Get-BcContainerRunArguments { <# .SYNOPSIS Builds the 'docker run' argument array for a Business Central container. .DESCRIPTION Internal, pure helper (no I/O) so the command construction is unit-testable. Produces the ordered argument list passed to Invoke-BcDocker. The image is placed last, as Docker requires. #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Returns a list of docker run arguments; the plural noun is intentional and the function is private.')] [CmdletBinding()] [OutputType([string[]])] param( [Parameter(Mandatory)] [string] $ImageName, [Parameter(Mandatory)] [string] $Name, [hashtable] $EnvironmentVariables = @{}, [string] $MemoryLimit, [ValidateSet('', 'process', 'hyperv')] [string] $Isolation = '', [string[]] $PublishPorts = @(), [hashtable] $Labels = @{}, [string[]] $Volumes = @(), [string[]] $AdditionalArguments = @(), [bool] $Detach = $true ) $dockerArgs = [System.Collections.Generic.List[string]]::new() $dockerArgs.Add('run') $dockerArgs.Add('--name'); $dockerArgs.Add($Name) $dockerArgs.Add('--hostname'); $dockerArgs.Add($Name) if ($Detach) { $dockerArgs.Add('--detach') } if ($MemoryLimit) { $dockerArgs.Add('--memory'); $dockerArgs.Add($MemoryLimit) } if ($Isolation) { $dockerArgs.Add('--isolation'); $dockerArgs.Add($Isolation) } foreach ($key in ($EnvironmentVariables.Keys | Sort-Object)) { $dockerArgs.Add('--env'); $dockerArgs.Add("$key=$($EnvironmentVariables[$key])") } foreach ($key in ($Labels.Keys | Sort-Object)) { $dockerArgs.Add('--label'); $dockerArgs.Add("$key=$($Labels[$key])") } foreach ($port in $PublishPorts) { $dockerArgs.Add('--publish'); $dockerArgs.Add($port) } foreach ($volume in $Volumes) { $dockerArgs.Add('--volume'); $dockerArgs.Add($volume) } foreach ($extra in $AdditionalArguments) { $dockerArgs.Add($extra) } $dockerArgs.Add($ImageName) return $dockerArgs.ToArray() } |