What is the manifest.yml file and what can I put in there?

RSS

What is the manifest.yml file and what can I put in there?

Last updated November 28th, 2016

The manifest.yml file is a YAML based schema definition of how to map external ports, directories, environment variables and various configuration options for your custom image.

Required parameters

A manifest.yml is required with every custom image, the following describes the minimum parameters needed.

Example manifest.yml, all parameters displayed are required:

version: 1
image:
    label: my-custom-image
    type: www
    provider: 'My Account'

As you can see this is the minimum needed in a manifest.yml to build a custom image. The manifest.yml is generated when you create your custom image and some of the values are already pre-populated.

Exposing and publishing ports

Usually you will need to expose or publish a port so that you can access your application.

Exposed ports are only accessible to containers running on the same server, whereas published ports are opened on the server making them publicly available.

It's worth noting that published ports are automatically exposed, regardless of whether or not you set exposed to false.

Example manifest.yml exposing port 80 and publishing port 8080:

version: 1
image:
  label: my-custom-image
  type: www
  provider: 'My Account'
ports:
  80:
    exposed: true
    publish: false
    protocol: tcp
  8080:
    exposed: true
    publish: true
    protocol: tcp

The port protocol can be either tcp or udp.

Mounting directories

The following example tells us how to mount the directories you have in your default-data and where they should be made accessible inside the image.

Example manifest.yml mounting directories: config, logs, application:

version: 1
image:
  label: my-custom-image
  type: www
  provider: 'My Account'
volumes:
  config:
    mode: ro
    dest: /container/config
  logs:
    mode: rw
    dest: /container/logs
  application:
    mode: rw
    dest: /container/application

In this example, you can see that we are mounting the directories config, logs, and application. These are named exactly the same as there respective folders inside the default-data directory.

You can also specify whether the mounted folder is read-only or not.

Environment variables

Sometimes it's useful to have environment variables which are used by your application, or if you would like to override a default system environment variable.

Example manifest.yml with environment variables:

version: 1
image:
  label: my-custom-image
  type: www
  provider: 'My Account'
env_file:
  my_environment_variables: # the filename which will hold your environment variables
    vars:
      example_variable:
        # You need to assign a default_value for all custom images, but you can
        # overwrite them when creating the container via the Control Panel
        default_value: 'this will be the default value'

      # Another example of an environment variable
      remote_database:
        default_value: '127.0.0.1'

In this example we are creating two environment variables example_variable and remote_database which will be stored inside the environment file called my_environment_variables.

You can have as many variables as you like within each environment file, as well as multiple environment files defined in the manifest.yml.

All environment variables must be of a key/value nature.

Can we improve this article? Suggest an improvement to this article.

Suggest an Improvement

Thank you for helping us to improve this Knowledge Base article. Please type your suggestions below:

Still need help? Get in touch with us.

If you aren't able to find the help you need then please send us a question and we can help you further.