Deploying Discourse on Docker is currently our recommended setup. It avoids many pitfalls installations have, such as misconfigured nginx, sub-optimal Ruby defaults and so on.

The Docker based setup ensures we are all on the same page when diagnosing installation issues and completely eradicates a class of support calls.

Today, all sites hosted by Discourse are on Docker.

This is a basic guide on how to move your current Discourse setup to a Docker based setup.

Getting started

First, get a blank site with working email installed. Follow the guide at and install a new, empty Discourse instance.


  • Bind the web to a different port than port 80, if you are on the same box. Eg:

        - "81:80"
  • Be sure to enter your email in the developer email section, so you get admin:

        # your email here
        DISCOURSE_DEVELOPER_EMAILS: '[email protected]'
  • Make sure email is setup and working by visiting /admin/email and sending a test email.

  • Make sure you have can enter your container ./launcher enter my_container must work.

If any of the above is skipped your migration will fail.

At the end of this process you will have a working website. Carry on.

Exporting and importing the old site

  • Ensure you are running the absolute latest version of Discourse. We had bugs in the export code in the past, make sure you are on latest before attempting an export.

  • On your current instance
    • go to /admin/backups and click on the button.
    • once the backup is done, you will be able to it.
  • On your newly installed docker instance
    • enable the allow_restore site setting
    • refresh your browser for the change to be taken into account
    • go to /admin/backups and your backup.
    • once your upload is done, click on the button
  • Change port binding so its on 80

  • Rebuild container ./launcher rebuild app

Yay. You are done.