Skip to content

About

Run several Autodesk Revit Server versions side by side in Docker on Windows, with a local web control panel and an nginx reverse proxy.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Revit Server Stack

Русская версия

Run Autodesk Revit Server 2020 to 2027 in Docker on one Windows machine, several versions side by side, and manage them from a small local web panel.

The Dockerfiles for Revit Server 2020 to 2025 come from dosymep/revit-server-docker. The Dockerfiles for 2026 and 2027 are new, because Autodesk changed the installer format (see Revit Server 2026 and 2027). This project also adds the control panel, the reverse proxy setup and the documentation.

What is inside

Part Where What it does
Dockerfiles src/rs<year>/ One image per Revit Server version. The installer is downloaded from Autodesk during the build.
Control panel panel/, Start-Panel.cmd Local web UI to start, stop, rebuild and configure everything, with live docker output.
Tray launcher RevitServerStack.exe, sources in launcher/ Icon in the notification area that starts the panel without a console window and opens it in the browser.
Reverse proxy generated by the panel, sample in samples/ nginx on port 80 that sends each request to the right version by the year in the URL.
Compose samples samples/ Plain compose files for running without the panel.

Requirements

  • Windows 10 or 11 with Docker Desktop. The Revit Server containers run on the Windows engine (docker context desktop-windows by default), the proxy runs on the Linux engine. The panel shows the state of both and can switch the engine for you.
  • Windows PowerShell 5.1, which is part of Windows. Nothing else to install.
  • Disk space and time: an image takes roughly 14 GB, and the first build downloads about 5 GB and takes 20 to 45 minutes.
  • Access to Autodesk download servers during the build. The builds of 2026 and 2027 also download 7-Zip from github.com.
  • The right to use Revit Server, see Legal.

Quick start

  1. Download RevitServerStack-<version>.zip from the Releases page and unpack it. The folder keeps your settings and, by default, the models (samples\rs<year>), so unpack it on a disk with enough free space.

  2. Run RevitServerStack.exe. An icon appears in the notification area and the panel opens in the browser at http://localhost:8787/. The icon menu has "Open the panel", "Startup log" and "Exit". Exit stops the panel, not the containers.

  3. Find the card of the version you need and press "Build and start". The output of the build is shown live.

  4. When the card shows that the version is running, open the admin page:

    • through the proxy: http://localhost/RevitServerAdmin2022/
    • directly: http://localhost:2022/RevitServerAdmin2022/

    Use your own year instead of 2022. The server needs a while after the start before the page answers.

  5. To let Revit connect, see the next section.

The exe is not code-signed, so Windows SmartScreen or an antivirus may warn on the first start. Compare the SHA-256 of the archive with the .sha256 file of the release, or build the exe yourself from launcher/RevitServerStack.cs.

Without the exe: run Start-Panel.cmd from a clone of the repository (the same panel in a console window, stop it with Ctrl+C), or build the exe with powershell -NoProfile -ExecutionPolicy Bypass -File launcher\Build.ps1.

Connecting Revit

Revit talks to Revit Server over WCF net.tcp on port 808, not over HTTP. In Revit, enter the name or IP address of this machine as the server, without a port.

Port 808 is fixed by the protocol, so only one version can publish it. Open Settings in the panel, tick "port 808 for Revit" for the version your Revit clients use, save, and restart that version. Without it Revit fails with "TCP 10061, connection refused", even though the admin page opens fine.

Control panel

  • State of Docker Desktop, the Windows engine and the Linux engine.
  • Start, stop, restart, rebuild and remove the container of each version, plus the proxy. "Start all" and "Stop all" act on everything at once.
  • Whether the image is built and whether the admin page really answers. A running container does not mean IIS has started yet.
  • Live docker output for every operation and a job history. A build keeps running if you close the panel and open it again.
  • Settings: host port and models folder per version, which versions the proxy routes, proxy port, docker contexts (including Docker on another computer), panel port.

Settings are saved to panel/runtime/panel.config.json. The panel writes the compose files and nginx.conf it runs into panel/runtime/compose/. This folder is ignored by git, and the files in samples/ stay untouched.

Names the panel uses: compose project samples, images samples-rs<year>, containers rs<year> and revit-proxy. Docker builds the images again if the project name changes, so leave it as it is unless you have a reason.

Languages

The panel and the menu of the tray icon speak English, Russian, German, French, Spanish, Brazilian Portuguese, Simplified Chinese and Japanese. The panel starts in the language of the browser and falls back to English when it does not have that language. The selector in the header of the panel changes the language, and the choice is remembered in the browser. The statuses and error messages that the panel sends follow the selected language, and its console window and the tray menu follow the language of Windows. The names of buttons and settings in this document are the English ones.

English and Russian are the reference texts. The other translations were not checked by native speakers, and corrections are welcome, see CONTRIBUTING.md.

Models

Each version keeps its central models in a folder on the host, samples/rs<year> by default, so removing or rebuilding a container never touches them. The panel creates the folder when needed. Back up this folder, not the container.

Security

The panel listens on localhost only. Every API call needs a session token that is generated at start and placed into the page when it is served, so a page from another origin can neither read the token nor drive docker through the panel. Do not expose the panel port beyond this machine, because it runs docker commands.

Revit Server itself is different. The version ports and the proxy port are published on all network interfaces so that colleagues can connect. Use the Windows firewall to limit access if the machine is on a network you do not control.

Run without the panel

A Revit Server version, on the Windows engine:

docker --context desktop-windows compose -f samples\docker-compose.2022.yml up -d --build

The proxy, on the Linux engine (the default context):

docker compose -f samples\docker-compose.proxy.yml up -d

Replace up -d --build with stop or down to stop or remove. The samples publish only the HTTP port (2022:80). To let Revit connect, add - '808:808' to the ports list of one version. The sample nginx.conf routes all eight versions, while the panel generates a config for the enabled ones only.

Docker on another computer

The Revit Server containers can run on a server or on another PC while the panel stays on yours. The panel drives Docker through docker contexts, so any engine docker can reach works.

  1. On the server you need a Docker Engine that runs Windows containers and, for an ssh:// address, an SSH server with your key in authorized_keys. The docker CLI must be installed there too: an ssh:// context runs docker system dial-stdio on the server.
  2. Open Settings, the section "Remote Docker". Enter a name and an address, either ssh://user@server (or an alias from ~/.ssh/config) or tcp://server:2376, and press "Add context". In a terminal the same is docker context create revit-server --docker "host=ssh://user@server". A TLS context needs certificates, create it with the docker CLI.
  3. Choose the new context in "Windows containers context". For every version you run, set the models folder to a full path on the server, for example D:\RevitServerData\rs2022. Create the folder on the server beforehand: the Docker engine for Windows does not create a missing folder. The panel does not create it from your machine and refuses to start a version whose folder is not such a path.
  4. Open the ports of the versions you use in the firewall of the server (the year of the version by default, for example 2022), and port 808 for the version that serves Revit clients.

What changes with a remote engine:

  • The images are built on the server: the build context is sent there and the server downloads the installers.
  • Links, the "Open" button and the readiness checks use the address of the server, taken from the context. For an ssh alias the real host name comes from ssh -G. If the address is wrong, set "Windows server address" in Settings.
  • The proxy needs a Linux engine, and a Windows server usually has none. Keep the proxy on another engine, for example your own Docker Desktop (leave "Proxy context (Linux)" as it is): nginx is pointed at the server automatically. The proxy may also run on a remote Linux engine: put its context into "Proxy context (Linux)". Its nginx.conf is passed inside the container, nothing is mounted from your machine. Or do without the proxy and open the versions by port.
  • The Docker Desktop indicator and its buttons disappear when no engine is on your machine.

The panel runs docker without a keyboard: it cannot type a password or confirm an unknown host key. Connect once with ssh user@server in a terminal, and use a key without a passphrase or load it into ssh-agent. A tcp:// engine without TLS gives everyone on the network full control of the server, so prefer ssh:// or TLS.

Revit Server 2026 and 2027

Autodesk ships these two versions as a 7-Zip archive behind a launcher of its interactive ODIS setup, not as the self-extracting installer of the older versions. The Dockerfiles do not run the launcher. They unpack the archive with 7-Zip (7zr.exe, version 26.04, SHA-256 checked during the build), take out RevitServer.msi with its files and install it with msiexec, with the same properties as the older versions.

Other differences from 2020 to 2025: the base image is wcf:4.8-windowsservercore-ltsc2022 (Revit Server 2027 is built for .NET Framework 4.8), and the downloads come from damassets.autodesk.net.

Checked on 2026-10-15: both images build and start on Docker Desktop with Windows containers, and the admin page, the REST service and port 808 answer. Connecting a Revit client was not tested.

Autodesk publishes these installers, and later their updates, on two support pages: Revit Server 2026 and Revit Server 2027. The Dockerfiles use the file listed there on 2026-10-15: Revit_Server_2026_4_win_db.sfx.exe (update 2026.4) and Revit_Server_2027_win_db.sfx.exe. To move to a newer update, follow CONTRIBUTING.md.

Repository layout

src/rs<year>/Dockerfile   image of one Revit Server version
panel/                    control panel: PowerShell and static HTML/JS, no dependencies
panel/tests/              self-checks of the panel and of the launcher
launcher/                 sources of RevitServerStack.exe and Build.ps1 that builds it and the release archive
samples/                  compose and nginx samples for use without the panel
Start-Panel.cmd           starts the panel in a console window

Troubleshooting

  • The panel says the Windows engine is unavailable: press the button next to the message, or run "%ProgramFiles%\Docker\Docker\DockerCli.exe" -SwitchWindowsEngine.
  • The build fails while downloading the installer: Autodesk has moved the file. Put the new link into the ADD line of src/rs<year>/Dockerfile. On 2026-10-15 the links of all eight versions answered with HTTP 200. For 2026 the file name carries the update number (Revit_Server_2026_4_win_db.sfx.exe is update 2026.4), so a newer update means a new link.
  • The card says "Running, the web page does not answer yet": IIS inside the container is still starting. Wait and the state changes by itself.
  • A remote engine shows as unavailable: run docker --context <name> ps in a terminal. If it asks for a password or a host key, or says the connection is refused, the panel cannot work either until that is fixed there.
  • Port 808 or 80 is busy: change the proxy port in Settings. Port 808 cannot be changed, so stop the program that holds it.

Tests

powershell -NoProfile -ExecutionPolicy Bypass -File panel\tests\Invoke-Tests.ps1

The script checks argument quoting, config validation and the generated files, starts the panel from a temporary copy to verify the token, Host header and path checks, builds the exe and checks that it starts and stops the panel, and packs a release archive to look inside. It needs git, and the docker CLI for two checks (they are skipped without it). It does not need a running docker engine.

Legal

Revit and Revit Server are trademarks of Autodesk, Inc. This project is not affiliated with or endorsed by Autodesk. It contains no Autodesk software: the Dockerfiles download the installer from Autodesk servers during the build and run it with ADSK_EULA_STATUS=#1, which marks the Autodesk license agreement as accepted. Make sure you are entitled to use Revit Server.

The project is released under the MIT License, see LICENSE.md. Credits are in CREDITS.md, changes in CHANGELOG.md.

About

Run several Autodesk Revit Server versions side by side in Docker on Windows, with a local web control panel and an nginx reverse proxy.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages