Microsoft has been investing in running docker on windows with Docker Desktop for Windows. Is it possible to run a legacy ASP Classic application on IIS through Docker? How?
2 Answers
I finally got this all working. It was a lot more complex than running a simple Dockerfile, as it was a site that was originally developed in 2002. There were modules that had to be downloaded and installed, web.config sections that needed to be unlocked, and ODBC data connections that had to be made. My final docker file looked like this - hope it helps the next person!
# escape=`
FROM mcr.microsoft.com/windows/servercore/iis
SHELL ["powershell", "-command"]
RUN Install-WindowsFeature Web-ASP; `
Install-WindowsFeature Web-CGI; `
Install-WindowsFeature Web-ISAPI-Ext; `
Install-WindowsFeature Web-ISAPI-Filter; `
Install-WindowsFeature Web-Includes; `
Install-WindowsFeature Web-HTTP-Errors; `
Install-WindowsFeature Web-Common-HTTP; `
Install-WindowsFeature Web-Performance; `
Install-WindowsFeature WAS; `
Import-module IISAdministration;
RUN md c:/msi;
RUN Invoke-WebRequest 'http://download.microsoft.com/download/C/9/E/C9E8180D-4E51-40A6-A9BF-776990D8BCA9/rewrite_amd64.msi' -OutFile c:/msi/urlrewrite2.msi; `
Start-Process 'c:/msi/urlrewrite2.msi' '/qn' -PassThru | Wait-Process;
RUN Invoke-WebRequest 'https://download.microsoft.com/download/1/E/7/1E7B1181-3974-4B29-9A47-CC857B271AA2/English/X64/msodbcsql.msi' -OutFile c:/msi/msodbcsql.msi;
RUN ["cmd", "/S", "/C", "c:\\windows\\syswow64\\msiexec", "/i", "c:\\msi\\msodbcsql.msi", "IACCEPTMSODBCSQLLICENSETERMS=YES", "ADDLOCAL=ALL", "/qn"];
EXPOSE 8000
RUN Remove-Website -Name 'Default Web Site'; `
md c:\mywebsite; `
New-IISSite -Name "mywebsite" `
-PhysicalPath 'c:\mywebsite' `
-BindingInformation "*:8000:";
RUN & c:\windows\system32\inetsrv\appcmd.exe `
unlock config `
/section:system.webServer/asp
RUN & c:\windows\system32\inetsrv\appcmd.exe `
unlock config `
/section:system.webServer/handlers
RUN & c:\windows\system32\inetsrv\appcmd.exe `
unlock config `
/section:system.webServer/modules
RUN Add-OdbcDsn -Name "mywebsite" `
-DriverName "\"ODBC Driver 13 For SQL Server\"" `
-DsnType "System" `
-SetPropertyValue @("\"Server=XXXX.us-east-2.rds.amazonaws.com\"", "\"Trusted_Connection=No\"");
ADD . c:\mywebsite

- 3
- 2

- 8,217
- 3
- 36
- 42
-
Elton Stoneman's answer was really important for setting me off in the right direction, so make sure you check that out below, too, for a better understanding. – Patrick Lee Scott Oct 08 '20 at 20:01
-
Stupid question but how do you actually deploy this on a Windows machine, does it support ci/cd as well and does the SQL dB live inside the docker container or outside ? – Umar.H Jan 03 '21 at 14:11
-
2CI/CD is a totally separate process - you can use Dockerfiles in CI/CD processes, yes. DB would run outside of this container, potentially in another container or on bare metal - it's outside of the concern of this container. As for how to deploy on Windows - run an orchestrator like Kubernetes. Find docs on kube for windows and follow those. – Patrick Lee Scott Feb 26 '21 at 19:18
-
1https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/ – Patrick Lee Scott Mar 10 '21 at 02:47
-
Hrm, the container doesn't seem to exist anymore, sad, as I wanted to test this out for an older site of a client – Steven Matthews May 07 '23 at 23:00
-
1I was able to find this working image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022 – Steven Matthews May 07 '23 at 23:02
I haven't tried, but it shouldn't be an issue to run classic ASP. The microsoft/iis
image is based from the microsoft/windowsservercore
image, which is a full Server Core install, and also includes 32-bit support.
The ASP feature won't be there by default, so your Dockerfile would have to start like this:
# escape=`
FROM microsoft/iis
SHELL ["powershell", "-command"]
RUN Install-WindowsFeature Web-ASP
(The escape
and SHELL
lines just make it easier to build Windows-friendy Dockerfiles, see Windows, Dockerfiles and the Backtick Backslash Backlash).
Then you would COPY
in your ASP app folder, and run the rest of your IIS setup with PowerShell commands. This question has some good pointers, and this Dockerfile for an ASP.NET app shows how you can use PowerShell to configure websites.

- 1
- 1

- 17,906
- 5
- 47
- 44
-
Awesome would love to try but hitting a new issue - windowsservercore image on docker hub seems to be corrupt - tried on two machine and two networks but it doesn't download successfully :( – Patrick Lee Scott Oct 18 '16 at 15:13
-
` ➜ docker pull microsoft/windowsservercore Using default tag: latest latest: Pulling from microsoft/windowsservercore 9c7f9c7d9bc2: Retrying in 9 seconds de5064718b3f: Retrying in 10 seconds ` and eventually "unknown blob" – Patrick Lee Scott Oct 18 '16 at 15:15
-
1Guess it's because you can only run windows containers on windows :( – Patrick Lee Scott Oct 18 '16 at 15:26
-
If you're using Windows Server 2016 make sure you run Windows Update - on Windows 10, you'll want to be on the Insider track. With the latest versions I have no issues with the Hub. – Elton Stoneman Oct 18 '16 at 15:37