Direct proxy

1:1 with mcr.microsoft.com

Same paths and tags as the upstream registry. Replace the hostname and you are done.

.NET stack

SDK, ASP.NET, runtime, SQL

Covers the full .NET image family plus SQL Server, Azure CLI, Functions, and dev-container bases.

Anonymous

No sign-in for public images

Public read pulls are anonymous. Plays nicely with containerd, CRI-O, K3s, and the Docker daemon.

Mirror URL

Hostname
docker-mcr-mirror.kargadan.ir

The mirror proxies mcr.microsoft.com directly, so any image path that works upstream works here when the hostname is replaced.

Popular MCR images

.NET SDK

dotnet/sdk:9.0

ASP.NET runtime

dotnet/aspnet:9.0

.NET runtime

dotnet/runtime:9.0

SQL Server

mssql/server:2022-latest

Azure CLI

azure-cli:latest

PowerShell

powershell:latest

Dev Containers

devcontainers/base:ubuntu

Azure Functions

azure-functions/dotnet:4

Pulling images

docker pull docker-mcr-mirror.kargadan.ir/dotnet/sdk:9.0
docker pull docker-mcr-mirror.kargadan.ir/dotnet/aspnet:9.0
docker pull docker-mcr-mirror.kargadan.ir/dotnet/runtime:9.0
docker pull docker-mcr-mirror.kargadan.ir/mssql/server:2022-latest
docker pull docker-mcr-mirror.kargadan.ir/azure-cli:latest
docker pull docker-mcr-mirror.kargadan.ir/powershell:latest

Kubernetes runtimes

containerd

# /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."mcr.microsoft.com"]
  endpoint = ["https://docker-mcr-mirror.kargadan.ir"]

sudo systemctl restart containerd

K3s

# /etc/rancher/k3s/registries.yaml
mirrors:
  mcr.microsoft.com:
    endpoint:
      - "https://docker-mcr-mirror.kargadan.ir"

sudo systemctl restart k3s

CRI-O

# /etc/containers/registries.conf.d/mcr-mirror.conf
[[registry]]
prefix   = "mcr.microsoft.com"
location = "docker-mcr-mirror.kargadan.ir"

sudo systemctl restart crio

Dockerfile examples

.NET Web API

FROM docker-mcr-mirror.kargadan.ir/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app

FROM docker-mcr-mirror.kargadan.ir/dotnet/aspnet:9.0
WORKDIR /app
COPY --from=build /app .
EXPOSE 8080
ENTRYPOINT ["dotnet", "MyApp.dll"]

SQL Server (development)

FROM docker-mcr-mirror.kargadan.ir/mssql/server:2022-latest
ENV ACCEPT_EULA=Y
ENV MSSQL_SA_PASSWORD=YourStrong@Passw0rd
ENV MSSQL_PID=Developer
EXPOSE 1433

Docker Compose example

services:
  api:
    image: docker-mcr-mirror.kargadan.ir/dotnet/aspnet:9.0
    ports:
      - "5000:8080"
    depends_on:
      - db
    environment:
      ConnectionStrings__DefaultConnection: "Server=db;Database=MyApp;User=sa;Password=YourStrong@Passw0rd;TrustServerCertificate=true"

  db:
    image: docker-mcr-mirror.kargadan.ir/mssql/server:2022-latest
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD: "YourStrong@Passw0rd"
    ports:
      - "1433:1433"
    volumes:
      - sqldata:/var/opt/mssql

volumes:
  sqldata:

Mirror information

Mirror typeProxy Direct proxy of mcr.microsoft.com
Original registrymcr.microsoft.com
ProtocolsHTTPS ยท HTTP
AuthenticationNot required (anonymous pulls)
Mapping rule

Image paths and tags are identical to the upstream registry. To convert, replace mcr.microsoft.com with docker-mcr-mirror.kargadan.ir โ€” nothing else changes.