Run the FrameworX runtime inside Docker with built-in HTTP probes for container orchestration-based deployments.
Reference → Runtime → Installation → Deployment → Docker
| Info |
|---|
New in 10.1.5. Docker deployment is a supported production path for the .NET 10 runtime, with Location under review. Final placement pending the next doc pass. |
The 10.1.5 runtime ships on .NET 10 and runs as a long-lived container process. Container orchestrators poll the HTTP endpoints exposed by the runtime and route traffic based on their responses. This page covers image preparation, the runtime configuration needed inside a container, and the HTTP probe contract consumed by Kubernetes, Docker Swarm, and cloud marketplace imagespersistent-volume layout.
| Table of Contents | ||||||
|---|---|---|---|---|---|---|
|
net10.0).portNumber.Place the runtime binaries under the container path /app/FactoryStudio and the solution under a mounted volume, for example /solutions/<SolutionName>. Log files go to /app/FactoryStudio/Logs.
The runtime exposes two probe endpoints on the same HTTP port as the main service. Both return a JSON body with snake_case fields.
| Endpoint | Purpose | Success | Failure |
|---|---|---|---|
GET /health | Liveness probe. Reports process health. | HTTP 200 with status: healthy or status: starting. | HTTP 503 with status: unhealthy and a reason field. |
GET /ready | Readiness probe. Reports whether the runtime accepts traffic. | HTTP 200 when the runtime is ready. | HTTP 503 while the runtime is starting, restarting, or unhealthy. |
| Code Block | ||
|---|---|---|
| ||
{
"status": "healthy",
"version": "10.1.5.2010",
"uptime_seconds": 3420,
"solution": "Plant1",
"started_at": "2026-04-19T13:22:10Z"
}
|
| Code Block | ||
|---|---|---|
| ||
{
"status": "unhealthy",
"reason": "Kernel init failed",
"version": "10.1.5.2010"
}
|
| status | Meaning |
|---|---|
starting | Process is up, modules not yet initialized. /health returns 200, /ready returns 503. |
healthy | Runtime fully initialized and serving traffic. Both endpoints return 200. |
unhealthy | A critical module failed or the health provider raised an exception. Both endpoints return 503. |
The probe endpoints bypass the file-request block toggle. They answer even when IsFileRequestDisabled is set for the runtime HTTP server.
| Code Block | ||
|---|---|---|
| ||
FROM mcr.microsoft.com/dotnet/runtime:10.0 WORKDIR /app COPY ./FactoryStudio /app/FactoryStudio COPY ./Solution /solutions/Plant1 EXPOSE 3101 HEALTHCHECK --interval=10s --timeout=3s --start-period=30s --retries=3 \ CMD curl --fail http://localhost:3101/health || exit 1 ENTRYPOINT ["dotnet", "/app/FactoryStudio/bin/net10.0/TStartup.dll", "/solution:/solutions/Plant1.tproj"] |
Adjust the ENTRYPOINT to match the runtime service bundled in your image. The HEALTHCHECK directive lets Docker restart the container when the runtime reports unhealthy.
Kubernetes maps the FrameworX probes to its liveness and readiness checksA minimal deployment manifest. A dedicated HTTP probe endpoint is planned for a later release. Until then, rely on Kubernetes process-liveness semantics and the Windows Service state on Windows nodes.
| Code Block | ||
|---|---|---|
| ||
apiVersion: apps/v1
kind: Deployment
metadata:
name: frameworx-runtime
spec:
replicas: 1
template:
spec:
containers:
- name: runtime
image: tatsoft/frameworx-runtime:10.1.5
ports:
- containerPort: 3101
readinessProbe:
httpGet:
path: /ready
port: 3101
initialDelaySeconds: 10
periodSeconds: 5
livenessProbe:
httpGet:
path: /health
port: 3101
initialDelaySeconds: 30
periodSeconds: 15
failureThreshold: 3
|
/ready returns 503, then restarts it when /health fails failureThreshold consecutive probes.| Path | Purpose | Mount Type |
|---|---|---|
/solutions | Solution files (.tproj) and embedded datasets. | Persistent volume. |
/app/FactoryStudio/Logs | Runtime trace logs. | Persistent volume or a log-forwarding sidecar. |
/app/FactoryStudio/Historian | Built-in Historian storage when the solution uses it. | Persistent volume with IOPS matching your retention load. |
/app/FactoryStudio/certs | PFX files for HTTPS. See TLS and SSL Configuration. | Secret-backed volume. |
Tatsoft publishes plans to publish prebuilt runtime images for Azure, AWS, and GCP marketplaces. Marketplace images ship with:
/health and /ready probe contract.Images will ship with environment variables for the solution path, HTTP port, and license activation
.A, a default non-root user, and a minimal base image.
Point your orchestrator at the marketplace image tag for your target runtime version, mount a solution volume, and expose the HTTP port. No repackaging is required.
| Symptom | Likely Cause | Next Step |
|---|---|---|
| Container exits immediately. | Solution path wrong, license missing, or entrypoint pointing at the wrong DLL. | Check docker logs for the startup trace, and verify the solution volume mount. |
| Runtime cannot reach PLCs or databases. | Network policy or missing service in the pod network. | Confirm the pod network reaches the target, and check outbound firewall rules. |
| Historian writes fail. | Persistent volume read-only, or not mounted. | Verify the Historian volume mount and permissions on /app/FactoryStudio/Historian |
/ready stuck on 503. | A module failed during initialization. | Call /health and read the reason field. Check /app/FactoryStudio/Logs. |
/health returns status: starting for longer than the start period. | The runtime is stuck loading the solution or waiting for a connection. | Raise Kubernetes initialDelaySeconds, or check PLC and database reachability from the pod. |
| Probe returns HTTP 404. | The runtime is older than 10.1.5 or the HTTP port is not the runtime port. | Confirm image tag is 10.1.5 or later. Confirm the mapped port is the tRPC HTTP port. |
| Page Tree | ||
|---|---|---|
|