Error: failed to start containerd task "hostprocesspod": failed to get application name from commandline "/usr/local/bin/app.exe": failed to find executable "/usr/local/bin/app.exe": unknown
Here we will find out what causes this mysterious “Failed to find application name from commandline
” error when launching a Windows HostProcess Pod
Source code
Create a Windows HostProcess Kubernetes cluster
To create a Windows HostProcess capable Kubernetes cluster we will use AKS-Engine
The make-aks-engine-cluster.ps1
script along with the win-hostprocess-cluster.json
file does this for you, all you need to provide is a valid subscription_id
The key thing to note in win-hostprocess-cluster.json
is the --feature-gates
flag set to WindowsHostProcessContainers=true
which allows this cluster to host HostProcess pods
$SUBSCRIPTION_ID=''
$CLUSTER_NAME='win-hostprocess-cluster'
$LOCATION='westus2'
$API_MODEL='win-hostprocess-cluster.json'
# Creates the resource group which will house your cluster
az group create --subscription $SUBSCRIPTION_ID --location $LOCATION --name $CLUSTER_NAME
# Creates an Azure Service Principal to let AKS-Engine deploy resources (your cluster) to your resource group
$AZSP=az ad sp create-for-rbac --name win-cluster-service-principal --role="Owner" --scopes="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$CLUSTER_NAME" -o json | ConvertFrom-Json
$CLIENT_ID=$AZSP.appId
$CLIENT_SECRET=$AZSP.password
# Let azure permissions propogate before creating cluster
Start-Sleep -Seconds 180
# Create a hostprocess capable kubernetes cluster using AKS-Engine
.\aks-engine deploy `
--subscription-id $SUBSCRIPTION_ID `
--client-id $CLIENT_ID `
--client-secret $CLIENT_SECRET `
--resource-group $CLUSTER_NAME `
--dns-prefix $CLUSTER_NAME `
--location $LOCATION `
--api-model $API_MODEL `
--force-overwrite
{
"apiVersion": "vlabs",
"properties": {
"orchestratorProfile": {
"orchestratorType": "Kubernetes",
"orchestratorRelease": "1.23",
"kubernetesConfig": {
"networkPlugin": "azure",
"apiServerConfig": {
"--feature-gates": "WindowsHostProcessContainers=true"
},
"kubeletConfig": {
"--feature-gates": "WindowsHostProcessContainers=true"
},
"containerRuntime": "containerd",
"windowsContainerdURL": "https://github.com/kubernetes-sigs/sig-windows-tools/releases/download/windows-containerd-nightly/windows-containerd.tar.gz",
"loadBalancerSku": "basic"
}
},
"masterProfile": {
"count": 1,
"vmSize": "Standard_D2_v2",
"availabilityProfile": "AvailabilitySet",
"platformUpdateDomainCount": 1
},
"agentPoolProfiles": [
{
"name": "windowspool",
"count": 1,
"vmSize": "Standard_D8s_v3",
"availabilityProfile": "VirtualMachineScaleSets",
"osType": "Windows",
"enableVMSSNodePublicIP": true
}
],
"windowsProfile": {
"adminUsername": "azureuser",
"adminPassword": "password1234$",
"sshEnabled": true,
"enableAutomaticUpdates": true,
"WindowsPublisher": "microsoft-aks",
"WindowsOffer": "aks-windows",
"WindowsSku": "2019-datacenter-core-ctrd-2108",
"imageVersion": "17763.2061.210830"
},
"linuxProfile": {
"adminUsername": "azureuser",
"ssh": {
"publicKeys": [
{
"keyData": ""
}
]
}
}
}
}

Containerize a simple go-lang application
Next we will “containerize” a simple go-lang application
Check out the source code for file placement but essentially, you just run this docker command with the Dockerfile
one directory above app.go
:
docker build -t winhostprocessfailedtofindexecutable:v1.0.0 -f Dockerfile .
# Use golang image to build binary
FROM golang:1.17 AS builder
# Make a working directory
WORKDIR /usr/local/app
# Copy the source code into the container
COPY src/ .
# Build the app
RUN go build app.go
# Copy the app binary into the final container image
FROM mcr.microsoft.com/windows/nanoserver:1809
COPY --from=builder /usr/local/app/app.exe \
/usr/local/bin/app.exe
ENTRYPOINT ["/usr/local/bin/app.exe"]
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Hello from the HostProcess pod!")
// Sleep
time.Sleep(1 * time.Hour)
}

Launch the HostProcess pod: “failed to get application name from command line
” fixed
This error is so mysterious.
The fix is simple.
HostProcess pods are run as Windows host processes, so they inherit the same file structure as the Windows host.
That means, if in your Dockerfile
you specified the entrypoint of the app as an absolute file path like I did i.e. /usr/local/bin/app.exe
, then the HostProcess pod will try to find that executable on the Windows host but it can’t.
To get around this, you need to use the %CONTAINER_SANDBOX_MOUNT_POINT%
environment variable in an command
field in your deployment yaml like so:
apiVersion v1
kind Pod
metadata
name hostprocesspod
spec
nodeSelector
kubernetes.io/os windows
securityContext
windowsOptions
hostProcesstrue
runAsUserName"NT AUTHORITY\\Local service"
hostNetworktrue
containers
name hostprocesspod
image coolstercodes.azurecr.io/winhostprocessfailedtofindexecutable v1.0.0
command"%CONTAINER_SANDBOX_MOUNT_POINT%/usr/local/bin/app.exe"
Now you should be able to launch your pod seamlessly like so:
.\kubectl --kubeconfig .\_output\win-hostprocess-cluster\kubeconfig\kubeconfig.westus2.json apply -f hostprocesspod.yaml
