Skip to main content
Version: 2026 R2

Docker Configuration

Docker is the recommended way to run AI Proxy Self-hosted. Using the prebuilt container image removes the complexity of installing .NET, managing dependencies, and configuring the runtime environment. Containerization also ensures consistent behavior across different environments — from a local machine running Docker Desktop, through production servers, to orchestration platforms such as Kubernetes or Azure Container Instances.

This guide provides ready-to-use docker-compose configurations for three main scenarios: a basic deployment with a PEM certificate, a configuration with a password-protected PFX certificate, and a more advanced deployment with Azure Application Insights integration for monitoring. Each configuration includes a description of the relevant parameters and startup instructions.

If you are deploying AI Proxy for the first time, we recommend starting with Variant 1, which uses a PEM certificate. It is the simplest option and works across all supported platforms.

Requirements

  • Docker Desktop or Docker Engine
  • an SSL/TLS certificate in PEM or PFX format
  • an aiconfiguration.json file
SSL Certificate

For production environments, use a certificate issued by a trusted certificate authority. For development environments, a self-signed certificate can be used. Example commands for generating one are provided at the end of this page.

Docker Compose Configurations

The following sections describe three configuration variants for different deployment scenarios.

Variant 1: PEM Certificate (docker-compose-basic-pem.yml)

This is the basic configuration for certificates in PEM format, such as certificates issued by Let’s Encrypt or generated with OpenSSL.

name: aiproxy_containers
services:
ai-proxy:
image: webconbps/aiproxy:1.0.0.235
container_name: ai-proxy
restart: unless-stopped
ports:
- "5298:8080"
- "7033:8081"
environment:
- ASPNETCORE_ENVIRONMENT=Production
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pem
- Logging__LogLevel__Default=Information
- Logging__LogLevel__Microsoft=Warning
volumes:
- ./certificates/certificate.pem:/app/https/certificate.pem:ro
- ./aiconfiguration.json:/app/aiconfiguration.json:ro

Variant 2: PFX Certificate (docker-compose-basic-pfx.yml)

This configuration is intended for password-protected certificates in PFX format. This format is commonly used in Windows environments.

name: aiproxy_containers
services:
ai-proxy:
image: webconbps/aiproxy:1.0.0.235
container_name: ai-proxy
restart: unless-stopped
ports:
- "5298:8080"
- "7033:8081"
environment:
- ASPNETCORE_ENVIRONMENT=Production
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pfx
- AppConfiguration__SelfHosted__Certificate__Password=<hasło>
- Logging__LogLevel__Default=Information
- Logging__LogLevel__Microsoft=Warning
volumes:
- ./certificates/certificate.pfx:/app/https/certificate.pfx:ro
- ./aiconfiguration.json:/app/aiconfiguration.json:ro
Password security

Replace <password> with the actual password for the PFX certificate. In production environments, consider using mechanisms such as Docker secrets instead of storing the password directly in the configuration file.

Variant 3: Application Insights (docker-compose-applicationinsights.yml)

This configuration extends the deployment with Azure Application Insights integration, enabling performance monitoring, log collection, and overall application diagnostics.

name: aiproxy_containers
services:
ai-proxy:
image: webconbps/aiproxy:1.0.0.235
container_name: ai-proxy
restart: unless-stopped
ports:
- "5298:8080"
- "7033:8081"
environment:
- ASPNETCORE_ENVIRONMENT=Production
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pem
- 'AppConfiguration__ApplicationInsightsConnectionString=<connection-string>'
- Logging__LogLevel__Default=Information
- Logging__LogLevel__Microsoft=Warning
- Serilog__Using__0=Serilog.Sinks.Console
- Serilog__Using__1=Serilog.Sinks.ApplicationInsights
- Serilog__WriteTo__0__Name=Console
- Serilog__WriteTo__1__Name=ApplicationInsights
- 'Serilog__WriteTo__1__Args__connectionString=<connection-string>'
- Serilog__WriteTo__1__Args__telemetryConverter=Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights
volumes:
- ./certificates/certificate.pem:/app/https/certificate.pem:ro
- ./aiconfiguration.json:/app/aiconfiguration.json:ro
Connection String from Azure

Replace <connection-string> with the actual connection string from Azure Portal, in the Application Insights > Properties section.

How to run AI Proxy - step by step

1. Prepare the files

Create a certificates directory and place your certificate file in it:

mkdir certificates
# Copy your certificate to ./certificates/certificate.pem (or .pfx)

Make sure the aiconfiguration.json file is located in the same directory as the docker-compose file.

2. Container startup

docker-compose up -d

3. Check the status

# Check if the container is running
docker-compose ps

# View logs
docker-compose logs -f ai-proxy

4. Shutdown

docker-compose down

Generating test certificates

For development environments, you can generate a self-signed certificate.

PEM Certificate (OpenSSL)

# Generate certificate
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

# Combine into one file
cat key.pem cert.pem > certificate.pem

# Move to certificates directory
mv certificate.pem ./certificates/

PFX Certificate (PowerShell)

# Generate certificate
$cert = New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(1)

# Export to PFX
$password = ConvertTo-SecureString -String "YourPassword123" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath ".\certificates\certificate.pfx" -Password $password

Troubleshooting

Container does not start

# Check logs
docker-compose logs ai-proxy

# Check status
docker ps -a

Possible causes:

  • the certificate file is missing from the ./certificates/ directory,
  • the aiconfiguration.json file is invalid,
  • ports 5298 or 7033 are already in use.

Ports occupied

If the required ports are already in use, change them in the docker-compose.yml file:

ports:
- "5299:8080" # Change first port
- "7034:8081" # Change first port

Then check which process is using the port:

netstat -ano | findstr :7033

Certificate problems

# Check if certificate is valid
openssl x509 -in ./certificates/certificate.pem -text -noout

# Check if container sees the file
docker exec ai-proxy ls -l /app/https/