Windows Container Deployment Guide
Historical / retired. This guide describes the legacy standalone Zastava Agent for Windows. The
StellaOps.Zastava.*source tree was archived on 2026-05-12 and the standalone agent no longer ships; Windows runtime evidence is now collected through the RuntimeInstrumentation host-agent / deployment-agent model. See the Zastava retirement record and the Windows host agent. The procedures below are retained as a reference for Windows container monitoring concepts.
This guide covers deploying and operating the Zastava Agent for Windows container monitoring.
Overview
The Zastava Agent supports Windows container runtime monitoring via:
- Docker Desktop for Windows - Docker API over named pipe
- Docker Engine on Windows Server - Native Windows containers
- Windows Server Core containers - Server-class workloads
System Requirements
Minimum Requirements
| Component | Requirement |
|---|---|
| Operating System | Windows Server 2019 or later |
| Container Runtime | Docker Engine 20.10+ or Docker Desktop 4.x |
| .NET Runtime | .NET 10.0 or later |
| Memory | 512 MB minimum, 1 GB recommended |
| Disk Space | 100 MB for agent + event buffer space |
Supported Windows Versions
| Windows Version | Container Types | Status |
|---|---|---|
| Windows Server 2022 | Windows Server Core, Nano Server | Full Support |
| Windows Server 2019 | Windows Server Core, Nano Server | Full Support |
| Windows 11 | Windows/Linux containers (via WSL2) | Supported |
| Windows 10 | Windows/Linux containers (via WSL2) | Supported |
Installation
Option 1: PowerShell Installation Script
# Download and run installer
Invoke-WebRequest -Uri "https://releases.stellaops.org/zastava-agent/latest/Install-ZastavaAgent.ps1" -OutFile "$env:TEMP\Install-ZastavaAgent.ps1"
# Install with required parameters
& "$env:TEMP\Install-ZastavaAgent.ps1" `
-Tenant "your-tenant" `
-ScannerBackendUrl "https://scanner.internal" `
-InstallPath "C:\Program Files\StellaOps\Zastava"
Option 2: Manual Installation
Download the agent:
$version = "latest" $arch = if ([System.Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" } $url = "https://releases.stellaops.org/zastava-agent/$version/zastava-agent-win-$arch.zip" Invoke-WebRequest -Uri $url -OutFile "C:\temp\zastava-agent.zip"Extract and install:
$installPath = "C:\Program Files\StellaOps\Zastava" New-Item -ItemType Directory -Path $installPath -Force Expand-Archive -Path "C:\temp\zastava-agent.zip" -DestinationPath $installPathCreate configuration file:
@" # Zastava Agent Configuration ZASTAVA_TENANT=your-tenant ZASTAVA_AGENT__Backend__BaseAddress=https://scanner.internal ZASTAVA_AGENT__DockerEndpoint=npipe:////./pipe/docker_engine ZASTAVA_AGENT__EventBufferPath=C:\ProgramData\StellaOps\Zastava\runtime-events ZASTAVA_AGENT__HealthCheck__Port=8080 "@ | Out-File -FilePath "$installPath\zastava-agent.env" -Encoding UTF8Install as Windows Service:
# Using NSSM (Non-Sucking Service Manager) nssm install ZastavaAgent "$installPath\StellaOps.Zastava.Agent.exe" nssm set ZastavaAgent AppDirectory "$installPath" nssm set ZastavaAgent AppEnvironmentExtra "+DOTNET_ENVIRONMENT=Production" nssm set ZastavaAgent DisplayName "StellaOps Zastava Agent" nssm set ZastavaAgent Description "Container Runtime Monitor for StellaOps" nssm set ZastavaAgent Start SERVICE_AUTO_STARTAlternatively, use the native
sc.exe:sc.exe create ZastavaAgent binPath= "$installPath\StellaOps.Zastava.Agent.exe" start= autoStart the service:
Start-Service ZastavaAgent
Configuration
Docker Named Pipe Access
The Windows agent connects to Docker via named pipe:
npipe:////./pipe/docker_engine
Environment Variables
| Variable | Default | Description |
|---|---|---|
ZASTAVA_TENANT | (required) | Tenant identifier |
ZASTAVA_AGENT__Backend__BaseAddress | (required) | Scanner backend URL |
ZASTAVA_AGENT__DockerEndpoint | npipe:////./pipe/docker_engine | Docker API endpoint |
ZASTAVA_AGENT__EventBufferPath | %ProgramData%\StellaOps\Zastava\runtime-events | Event buffer directory |
ZASTAVA_AGENT__HealthCheck__Port | 8080 | Health check HTTP port |
Configuration File Location
C:\Program Files\StellaOps\Zastava\zastava-agent.env
Docker Desktop Configuration
Enable TCP/Named Pipe Access
- Open Docker Desktop Settings
- Go to Settings → General
- Enable Expose daemon on tcp://localhost:2375 without TLS (for development only)
- Or use the named pipe (default):
npipe:////./pipe/docker_engine
Windows Containers Mode
Ensure Docker is in Windows containers mode:
# Check current mode
docker info --format '{{.OSType}}'
# Should output: windows
To switch to Windows containers:
- Right-click Docker Desktop tray icon
- Select “Switch to Windows containers…”
Security Considerations
Named Pipe Permissions
The Docker named pipe requires membership in:
docker-usersgroup (Docker Desktop)Administratorsgroup (Docker Engine)
# Add service account to docker-users group
Add-LocalGroupMember -Group "docker-users" -Member "NT SERVICE\ZastavaAgent"
Windows Firewall
If health checks are accessed remotely:
New-NetFirewallRule `
-DisplayName "Zastava Agent Health Check" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 8080 `
-Action Allow
PE Library Hashing
The agent collects SHA-256 hashes of loaded DLLs from Windows containers:
- Portable Executable (PE) format parsing
- Version information extraction
- Digital signature verification (if signed)
Health Monitoring
Health Endpoints
| Endpoint | URL | Description |
|---|---|---|
| Liveness | http://localhost:8080/healthz | Agent is running |
| Readiness | http://localhost:8080/readyz | Agent can process events |
PowerShell Health Check
# Check agent health
Invoke-RestMethod -Uri "http://localhost:8080/healthz"
# Check readiness
Invoke-RestMethod -Uri "http://localhost:8080/readyz"
Windows Service Status
# Check service status
Get-Service ZastavaAgent
# View service events
Get-EventLog -LogName Application -Source ZastavaAgent -Newest 20
Logging
Event Log
Agent logs are written to Windows Event Log:
- Log: Application
- Source: ZastavaAgent
# View recent events
Get-EventLog -LogName Application -Source ZastavaAgent -Newest 50
# Filter by level
Get-EventLog -LogName Application -Source ZastavaAgent -EntryType Error,Warning
File Logging (Optional)
Enable file logging via configuration:
Serilog__WriteTo__0__Name=File
Serilog__WriteTo__0__Args__path=C:\ProgramData\StellaOps\Zastava\logs\agent-.log
Serilog__WriteTo__0__Args__rollingInterval=Day
Troubleshooting
Agent Won’t Start
Check Docker is running:
docker infoVerify named pipe exists:
Test-Path "\\.\pipe\docker_engine"Check service account permissions:
whoami /groupsReview Event Log:
Get-EventLog -LogName Application -Source ZastavaAgent -Newest 10
Cannot Connect to Docker
Test Docker API:
Invoke-RestMethod -Uri "http://localhost:2375/info" -Method Get # or for named pipe docker versionVerify Docker mode:
docker info --format '{{.OSType}}' # Should be "windows" for Windows containersCheck pipe permissions:
# List pipe ACL Get-Acl "\\.\pipe\docker_engine" | Format-List
Events Not Being Sent
Check event buffer:
Get-ChildItem "C:\ProgramData\StellaOps\Zastava\runtime-events"Verify backend connectivity:
Test-NetConnection -ComputerName scanner.internal -Port 443Check readiness:
Invoke-RestMethod -Uri "http://localhost:8080/readyz"
Upgrade Procedure
Stop the service:
Stop-Service ZastavaAgentBackup configuration:
Copy-Item "C:\Program Files\StellaOps\Zastava\zastava-agent.env" "C:\temp\zastava-agent.env.bak"Download and extract new version:
$version = "1.2.0" $url = "https://releases.stellaops.org/zastava-agent/$version/zastava-agent-win-x64.zip" Invoke-WebRequest -Uri $url -OutFile "C:\temp\zastava-agent.zip" Expand-Archive -Path "C:\temp\zastava-agent.zip" -DestinationPath "C:\Program Files\StellaOps\Zastava" -ForceRestore configuration:
Copy-Item "C:\temp\zastava-agent.env.bak" "C:\Program Files\StellaOps\Zastava\zastava-agent.env"Start the service:
Start-Service ZastavaAgentVerify health:
Invoke-RestMethod -Uri "http://localhost:8080/healthz"
Uninstallation
# Stop and remove service
Stop-Service ZastavaAgent
sc.exe delete ZastavaAgent
# Remove installation directory
Remove-Item -Path "C:\Program Files\StellaOps\Zastava" -Recurse -Force
# Remove data directory
Remove-Item -Path "C:\ProgramData\StellaOps\Zastava" -Recurse -Force
Known Limitations
- Hyper-V isolation only - Process-isolation containers have limited observability.
- Windows container logs - Container stdout/stderr capture is not yet implemented.
- Linux containers via WSL2 - The agent monitors Windows containers; Linux containers running under WSL2 are not directly observed by this agent.
