Migrate an old Discourse install to Docker

:information_source: 2022.10.21 @pfaffman adds: If you are somehow using a non-docker installation in 2022 then this guide might help you. There is not much way to test it, but it should work.

Kept for historical purposes

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 GitHub - discourse/discourse_docker: A Docker image for Discourse 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: 'my_email@email.com'
  • 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.