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()
}