This guide will help you setup Runnable templates for a simple Django application. This guide will assume that you don't have a Dockerfile and want Runnable to generate the Dockerfile for you using a simple setup guide.

Configuring the App

  • From the Configure page, click on the Create Template button. Choose the Django repository you want to add.
  • Select Start up with our setup guide as your configuration mode.
  • Name your template.
  • Now you can select your Stack Type. This is the environment that your repository requires for runtime. In our case, it is Python.
  • After clicking Next, you will be presented with the following three options: Packages, Build Commands, and Container CMD.


This option allows you to install any tools, libraries, or frameworks you need. Add multiple packages by separating them with spaces. You can specify packages that are listed in the Ubuntu Aptitude library.


Build Commands

Use this option to specify any commands needed to build and prepare your app (supports UNIX bash format). These commands will run in the root folder of the repository after every push. This is also the perfect place to run any commands to build any assets (such as css, html and minified javascript code).

For our simple API repository, this is where we’ll specify:

pip install -r 'requirements.txt'

Build commands cannot connect to any other container during a build. It is therefore not recommended to seed databases or communicate with another container using the Build Commands.

Container CMD

Here the main run command for your app is specified. Important: the container will stop running when this command exits. For our simple Django app, we will specify:

python runserver

Note that we are using to bind to all interfaces. This will allow us to access the container from other containers and through the browser."

Container CMD is where the invocation command for our app is specified. Important: the container will stop running when this command exits.

Click Next. Additional configuration options are revealed to customize your container further:


Environment Variables

Add any required Environtment Variables your app may need. These values will be inserted into a container's environment when it launches from the template. The the syntax for entering in Environment variables is KEY=VAL

For example: if you are trying to set the "DEBUG" to "True", you would input "DEBUG=True".

Files & SSH Keys

Use this tool to add any addtional configuration files, other GitHub repositories, SSH Keys or assets your repository needs to build and run properly. This is also the option to use if you have to upload any override files to overwrite any hard coded values in your repository.

For more details, Check Out:

  1. Adding Files to your Container
  2. Adding SSH Keys to build private modules

Exposed Ports

Open up any ports your repository may need.

Since your app runs on port 8000, we'll click on the Exposed Ports tool and expose it. Expose Ports

  1. Once you are happy with Save & Build to save our changes and trigger your first build.
  2. You will be automatically transitioned to the Logs tab of your configuration. Here you will be able to access:

Build Logs

These logs correspond to all the output from the build process of your template. Any errors here will correspond to configuration options you have specified in your repository, Build Commands, Packages and Files & SSH keys.


CMD Logs

These logs correspond to all the output from the run process of a container launched from your template. Any errors here will correspond to configuration options you have specified in your CMD Command or Environment Variables.


Your repository can crash for several reasons outside of your configuration on Runnable. There could be several factors ranging from a bug in your code or a misconfigured connection.


This is a terminal session into a container launched from your template. This is useful to verify any configuration details you may want to confirm.



This is the Environment URL corresponding to the container launched from the default branch. Check this article out for more about Runnable URLs.


  • Save & Build to save our changes and trigger your first build. Trigger Build

  • When you’re ready, click Done to see a summary of your new container.

  • If everything went well, your build will complete successfully. Anytime you run across an error that you need help with, we have developers ready to help in real-time. Click on the chat bubble on the bottom left!

Connecting to a DB template

  1. Follow one of our DB Quickstarts to add and seed a database: MySQL / PostgresQL / MongoDB.

  2. In our case, we added a MySQL template. 

  3. Our repository is setup to use the environment variable "MYSQL_HOST" to reference the hostname for MYSQL. To connect our Django repository template to the "MySQL" template, open up the "Environment Variables" tool in the Django template configuration modal.

    If you don't use Environment Variables for host discovery, you may have to modify your repository to use the Runnable template URL as your MySQL hostname. You can do this by either uploading a file using "Files & SSH Keys" or by actually modifying your repository on

  4. Specify the the value for the "MYSQL_HOST" environment variable. From our article Runnable URLs, it is clear that we need to use MySQL's template URL to connect to it. As a convenience we provide all template URLs in the Environment Variables tab. 

  5. Click Save & Build.

  6. The Django template is now successfully connected with the "MySQL" template!

Head on over to our Branches section to see how to containers from your templates.

Have more questions? Submit a request