Portainer Documentation
Official WebsiteKnowledge BasePricingGet 3 Nodes of BE Free
2.21 LTS
2.21 LTS
  • Welcome
  • What's new in version 2.21
  • Release Notes
  • Getting Started
    • Introduction
    • Portainer architecture
    • Lifecycle policy
    • Requirements and prerequisites
    • Install Portainer BE
      • Set up a new Portainer BE Server installation
        • Docker Standalone
          • Install Portainer BE with Docker on Linux
          • Install Portainer BE with Docker on WSL / Docker Desktop
          • Install Portainer BE with Docker on Windows Container Service
        • Docker Swarm
          • Install Portainer BE with Docker Swarm on Linux
          • Install Portainer BE with Docker Swarm on WSL / Docker Desktop
          • Install Portainer BE with Docker Swarm on Windows Container Service
        • Kubernetes
          • Install Portainer BE on your Kubernetes environment
          • Install Portainer BE with Kubernetes on WSL / Docker Desktop
        • Initial setup
    • Install Portainer CE
      • Set up a new Portainer CE Server installation
        • Docker Standalone
          • Install Portainer CE with Docker on Linux
          • Install Portainer CE with Docker on WSL / Docker Desktop
          • Install Portainer CE with Docker on Windows Container Service
        • Docker Swarm
          • Install Portainer CE with Docker Swarm on Linux
          • Install Portainer CE with Docker Swarm on WSL / Docker Desktop
          • Install Portainer CE with Docker Swarm on Windows Container Service
        • Kubernetes
          • Install Portainer CE on your Kubernetes environment
          • Install Portainer CE with Kubernetes on WSL / Docker Desktop
        • Initial setup
    • Add an environment to an existing installation
    • Updating Portainer
      • Updating on Docker Standalone
      • Updating on Docker Swarm
      • Updating on Kubernetes
      • Updating on Nomad
      • Updating the Edge Agent
      • Updating from Portainer 1.x
      • Switching to Portainer Business Edition
        • Upgrade to Business Edition from within Portainer Community Edition
        • Docker Standalone
        • Docker Swarm
        • Kubernetes
        • Upgrading Agent-only deployments
  • Using Portainer
    • Home
      • Snapshot browsing
      • OpenAMT
    • Docker/Swarm
      • Dashboard
      • Templates
        • Application
        • Custom templates
        • Deploy a stack
        • Deploy a container
      • Stacks
        • Add a new stack
        • Inspect or edit a stack
        • Create a template from a deployed stack
        • Webhooks
        • Migrate or duplicate a stack
        • Remove a stack
      • Services
        • Add a new service
        • Configure service options
        • Scale a service
        • View the status of a service task
        • View service logs
        • Roll back a service
        • Webhooks
      • Containers
        • Add a new container
        • View a container's details
        • Inspect a container
        • Edit or duplicate a container
        • Advanced container settings
        • Webhooks
        • Attach a volume to a container
        • View container logs
        • View container statistics
        • Access a container's console
        • Change container ownership
        • Remove a container
      • Images
        • Pull an image
        • Build a new image
        • Import an image
        • Export an image
      • Networks
        • Add a new network
        • Remove a network
      • Volumes
        • Add a new volume
        • Browse a volume
        • Remove a volume
      • Configs
        • Add a new config
        • Remove a config
      • Secrets
        • Add a new secret
        • Remove a secret
      • Events
      • Host
        • Details
        • Setup
        • Registries
      • Swarm
        • Details
        • Cluster visualizer
        • Setup
        • Registries
    • Kubernetes
      • Dashboard
      • kubectl shell
      • Kubeconfig
      • Custom Templates
        • Add a new custom template
        • Edit a custom template
        • Remove a custom template
      • Namespaces
        • Add a new namespace
        • Manage a namespace
        • Manage access to a namespace
        • Remove a namespace
      • Helm
      • Applications
        • Add a new application using a form
        • Add a new application using a manifest
        • Inspect an application
        • Inspect a Helm application
        • Edit an application
        • Webhooks
        • Detach a volume from an application
        • Remove an application
      • Networking
        • Services
        • Ingresses
          • Add an Ingress manually
          • Add an Ingress using a manifest
          • Remove an Ingress
      • ConfigMaps & Secrets
        • Add a ConfigMap
        • Add a Secret
      • Volumes
        • Inspect a volume
        • Remove a volume
      • More Resources
        • Service Accounts
        • Cluster Roles
        • Roles
      • Cluster
        • Details
        • Inspect a node
        • Setup
        • Security constraints
        • Registries
    • Azure ACI
      • Dashboard
      • Container instances
        • Add a new container
        • Remove a container
    • Nomad
    • Edge Compute
      • Edge Groups
      • Edge Stacks
        • Add a new Edge Stack
      • Edge Jobs
      • Edge Configurations
      • Waiting Room
      • Edge Templates
        • Application
        • Custom
    • Account settings
  • Administering Portainer
    • User-related
      • Users
      • Add a new user
      • Turn a user into an administrator
      • Reset a user's password
      • Teams
        • Add a new team
        • Add a user to a team
      • Roles
    • Environment-related
      • Environments
      • Add a new environment
        • Add a local environment
        • Add a Docker Standalone environment
          • Install Portainer Agent on Docker Standalone
          • Connect to the Docker API
          • Connect to the Docker Socket
          • Install Edge Agent Standard on Docker Standalone
          • Install Edge Agent Async on Docker Standalone
        • Add a Docker Swarm environment
          • Install Portainer Agent on Docker Swarm
          • Connect to the Docker API
          • Connect to the Docker Socket
          • Install Edge Agent Standard on Docker Swarm
          • Install Edge Agent Async on Docker Swarm
        • Add a Kubernetes environment
          • Install Portainer Agent on your Kubernetes environment
          • Install Edge Agent Standard on Kubernetes
          • Install Edge Agent Async on Kubernetes
          • Import an existing Kubernetes environment
        • Add an ACI environment
        • Add a Nomad environment
        • Provision KaaS Cluster
          • Civo
          • Akamai Connected Cloud
          • DigitalOcean
          • Google Cloud
          • AWS
          • Azure
        • Create a Kubernetes cluster
          • MicroK8s
            • Offline installation
        • Add an environment via the Portainer API
      • Auto onboarding
      • Groups
      • Tags
      • Manage access to environments
      • Manage access to environment groups
      • Update & Rollback
    • Registries
      • Add a new registry
        • Add a DockerHub account
        • Add an AWS ECR registry
        • Add a Quay.io registry
        • Add a ProGet registry
        • Add an Azure registry
        • Add a Gitlab registry
        • Add a GitHub registry
        • Add a custom registry
      • Browse a registry
      • Manage a registry
    • Licenses
    • Logs
      • Authentication
      • Activity
    • Notifications
    • Settings
      • General
      • Authentication
        • Authenticate via LDAP
        • Authenticate via Active Directory
        • Authenticate via OAuth
      • Shared credentials
        • Add Civo credentials
        • Add Akamai Connected Cloud credentials
        • Add DigitalOcean credentials
        • Add Google Cloud credentials
        • Add AWS credentials
        • Add Azure credentials
        • Add SSH credentials
      • Edge Compute
  • Frequently Asked Questions
    • Portainer Concepts
    • Installing
    • Upgrading
    • Troubleshooting
    • Contributing
  • Advanced Topics
    • CLI configuration options
    • App templates
      • Build and host your own app templates
      • App template JSON format
    • The Portainer Edge Agent
    • Access control
    • Reset the admin user's password
    • Security and compliance
    • Encrypting the Portainer database
    • Using your own SSL certificate with Portainer
    • Using mTLS with Portainer
    • Stream auth and activity logs to an external provider
    • Using Portainer with reverse proxies
      • Deploying Portainer behind Traefik Proxy
      • Deploying Portainer behind nginx reverse proxy
    • How Relative Path Support works in Portainer
    • Helm chart configuration options
    • Docker roles and permissions
    • Kubernetes roles and bindings
    • Deprecated and removed features
  • API
    • Accessing the Portainer API
    • API documentation
    • API usage examples
  • Get More Help
    • Knowledge Base
    • Portainer Academy
    • YouTube
    • GitHub
    • Slack
    • Discord
    • Open a support request
  • Contribute to Portainer
    • Contribute
    • Build instructions
      • Set up a macOS build environment
      • Set up a Linux build environment
Powered by GitBook
On this page
  • Container template definition format
  • type
  • title
  • description
  • image
  • administrator-only
  • name
  • logo
  • registry
  • command
  • env
  • network
  • volumes
  • ports
  • labels
  • privileged
  • interactive
  • restart_policy
  • hostname
  • note
  • platform
  • categories
  • Stack template definition format
  • type
  • title
  • description
  • repository
  • administrator_only
  • name
  • logo
  • env
  • note
  • platform
  • categories

Was this helpful?

Edit on GitHub
  1. Advanced Topics
  2. App templates

App template JSON format

App template definitions are written in JSON. Valid templates consist of an array, and every template definition consists of one element.

Container template definition format

A container template element must be a valid JSON object, composed of both mandatory and optional data fields. Here's an example of the format:

{
  "version": "2",
  "templates": [
    {
      // template1
    },
    {
      // template2
    },
    ...
  ]
}

type

  • Description: The template type.

  • Format: Integer

  • Valid values: 1 = container; 2 = Swarm stack; 3 = Compose stack

  • Required/Optional: Required

  • Other information: Type 3 is limited to using the version "2" stack format (this is a docker/libcompose limitation).

title

  • Description: The template title.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Required

description

  • Description: The template description.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Required

image

  • Description: The Docker image associated with a template.

  • Format: String

  • Valid values: Any valid URL.

  • Required/Optional: Required

administrator-only

  • Description: Indicates whether or not a template should be available just to admin users.

  • Format: Boolean

  • Valid values: true = available to admins only; false = available to all users

  • Required/Optional: Optional

  • Example: See below.

{
  "administrator-only": true
}

name

  • Description: The default name of a template (shows in the Portainer UI).

  • Format: String

  • Valid values: Any valid string.

  • Required/Optional: Optional

logo

  • Description: The template logo.

  • Format: String

  • Valid values: Any valid URL.

  • Required/Optional: Optional

registry

  • Description: The registry where the Docker image is stored. If not specified, Portainer will use Docker Hub as the default.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Optional

command

  • Description: The command to run in the container. If not specified, the container will use the default command in its Dockerfile.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Optional

  • Example: See below.

{
  "command": "/bin/bash -c \"echo hello\" && exit 777"
}

env

  • Description: A JSON array describing the environment variables required by a template. Each element in the array must be a valid JSON object. An input will be generated in the templates view for each element in the array. Depending on the object properties, different types of inputs can be generated (text input, select).

  • Format: Array

  • Required/Optional: Optional

Array format:

{
  "name": "the name of the environment variable, as supported in the container image (mandatory)",
  "label": "label for the input in the UI (mandatory unless set is present)",
  "description": "a short description for this input, will be available as a tooltip in the UI (optional)",
  "default": "default value associated to the variable (optional)",
  "preset": "boolean. If set to true, the UI will not generate an input (optional)",
  "select": "an array of possible values, will generate a select input (optional)"
}

Example:

{
  "env": [
    {
      "name": "MYSQL_ROOT_PASSWORD",
      "label": "Root password",
      "description": "Password used by the root user."
    },
    {
      "name": "ENV_VAR_WITH_DEFAULT_VALUE",
      "default": "default_value",
      "preset": true
    },
    {
      "name": "ENV_VAR_WITH_SELECT_VALUE",
      "label": "An environment variable",
      "description": "A description for this env var",
      "select": [
        {
          "text": "Yes, I agree",
          "value": "Y",
          "default": true
        },
        {
          "text": "No, I disagree",
          "value": "N"
        },
        {
          "text": "Maybe",
          "value": "YN"
        }
      ],
      "description": "Some environment variable."
    }
  ]
}

network

  • Description: A string that corresponds to the name of an existing Docker network. Will auto-select the network in the templates view.

  • Format: String

  • Valid values: Any string value. If the string does not match an existing network name when the template is used it will fall back to the first available network.

  • Required/Optional: Optional

  • Example: See below.

{
  "network": "host"
}

volumes

  • Description: A JSON array describing the volumes associated with a template. Each element in the array must be a valid JSON object with a required container property. For each element in the array, a Docker volume will be created and associated when starting the container. If a bind property is defined, it will be used as the source of a bind mount. If a readonly property is is defined and = true, the volume will be mounted in readonly mode.

  • Format: Array

  • Required/Optional: Optional

  • Example: See below.

{
  "volumes": [
    {
      "container": "/etc/nginx"
    },
    {
      "container": "/usr/share/nginx/html",
      "bind": "/var/www",
      "readonly": true
    }
  ]
}

ports

  • Description: A JSON array describing the ports exposed by a template. Each element in the array must be a valid JSON string specifying the port number in the container, as well as the protocol. Can be optionally prefixed with a port number and colon (for example 8080:) to define the port to be mapped on the host. If the host port is not specified, the Docker host will automatically assign it when starting the container.

  • Format: Array

  • Required/Optional: Optional

  • Example: See below.

{
  "ports": ["8080:80/tcp", "443/tcp"]
}

labels

  • Description: A JSON array describing the labels associated with a template. Each element in the array must be a valid JSON object with two properties (name: and "<value>").

  • Format: Array

  • Required/Optional: Optional

  • Example: See below.

{
  "labels": [
    { "name": "com.example.vendor", "value": "Acme" },
    { "name": "com.example.license", "value": "GPL" },
    { "name": "com.example.version", "value": "1.0" }
  ]
}

privileged

  • Description: Indicates whether or not the container should be started in privileged mode. Defaults to false if not specified.

  • Format: Boolean

  • Valid values: true = start the container in privileged mode; false = do not start the container in privileged mode

  • Required/Optional: Optional

  • Example: See below.

{
  "privileged": true
}

interactive

  • Description: Indicates whether or not the container should be started in foreground mode. Defaults to false if not specified.

  • Format: Boolean

  • Valid values: true = start the container in foreground mode; false = do not start the container in foreground mode

  • Required/Optional: Optional

  • Example: See below.

{
  "interactive": true
}

restart_policy

  • Description: The restart policy associated with the container. Will default to "always" if no value is specified.

  • Format: String

  • Valid values:

    • "always" Always restart the container regardless of the exit status.

    • "no" Never automatically restart the container.

    • "on-failure" Restart the container only if it exits with a non-zero status.

    • "unless-stopped" Always restart the container regardless of the exit status (unless the container was manually stopped).

  • Required/Optional: Optional

  • Example: See below.

{
  "restart_policy": "unless-stopped"
}

hostname

  • Description: The hostname of the container. Will default to Docker if not specified.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Optional

  • Example: See below.

{
  "hostname": "mycontainername"
}

note

  • Description: Extra information about a template, for example what it is used for. Displayed inside the template-creation form in the Portainer UI. Supports HTML.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Optional

  • Example: See below.

{
  "note": "You can use this field to record extra information about a template."
}

platform

  • Description: The supported platform. Displays a small platform-related icon in the Portainer UI. Must contain a valid value.

  • Format: String

  • Valid values: "linux"; "windows"

  • Required/Optional: Optional

  • Example: See below.

{
  "platform": "linux"
}

categories

  • Description: An array of categories associated with a template. Populates the category filter in the Portainer UI.

  • Format: Array

  • Required/Optional: Optional

  • Example: See below.

{
  "categories": ["webserver", "open-source"]
}

Stack template definition format

A stack template element must be a valid JSON object, composed of mandatory and optional data fields. Here's an example of the format:

{
  "type": 2,
  "title": "CockroachDB",
  "description": "CockroachDB cluster",
  "note": "Deploys an insecure CockroachDB cluster, please refer to CockroachDB documentation for production deployments.",
  "categories": ["database"],
  "platform": "linux",
  "logo": "https://cloudinovasi.id/assets/img/logos/cockroachdb.png",
  "repository": {
    "url": "https://github.com/portainer/templates",
    "stackfile": "stacks/cockroachdb/docker-stack.yml"
  }
}

type

  • Description: The template type. A Swarm stack will be deployed using the equivalent of docker stack deploy. A Compose stack will be deployed using the equivalent of docker-compose.

  • Format: Integer

  • Valid values: 1 = container; 2 = Swarm stack; 3 = Compose stack

  • Required/Optional: Required

  • Other information: Type 3 is limited to using the version "2" stack format (this is a docker/libcompose limitation).

title

  • Description: The template title.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Required

description

  • Description: The template description.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Required

repository

  • Description: A JSON object describing the public Git repository from where the stack template will be loaded. It indicates the URL of the Git repository as well as the path to the Compose file inside the repository.

  • Format: Object

  • Valid values: See the example below.

  • Required/Optional: Required

This value must reference a Git repository.

Object format:

{
  "url": "URL of the public git repository (mandatory)",
  "stackfile": "Path to the Compose file inside the repository (mandatory)",
}

Example:

{
  "url": "https://github.com/portainer/templates",
  "stackfile": "stacks/cockroachdb/docker-stack.yml"
}

administrator_only

  • Description: Indicates whether or not a template should be available just to admin users.

  • Format: Boolean

  • Valid values: true = available to admins only; false = available to all users

  • Required/Optional: Optional

  • Example: See below.

{
  "administrator_only": true
}

name

  • Description: The default name of a template (shows in the Portainer UI).

  • Format: String

  • Valid values: Any valid string.

  • Required/Optional: Optional

logo

  • Description: The template logo.

  • Format: String

  • Valid values: Any valid URL.

  • Required/Optional: Optional

env

  • Description: A JSON array describing the environment variables required by a template. Each element in the array must be a valid JSON object. An input will be generated in the templates view for each element in the array. Depending on the object properties, different types of inputs can be generated (text input, select).

  • Format: Array

  • Required/Optional: Optional

An input will be generated in the templates view for each element in the array. Depending on the object properties, different types of inputs can be generated (text input, select).

Array format:

{
  "name": "the name of the environment variable, as supported in the container image (mandatory)",
  "label": "label for the input in the UI (mandatory unless set is present)",
  "description": "a short description for this input, will be available as a tooltip in the UI (optional)",
  "default": "default value associated to the variable (optional)",
  "preset": "boolean. If set to true, the UI will not generate an input (optional)",
  "select": "an array of possible values, will generate a select input (optional)"
}

Example:

{
  "env": [
    {
      "name": "MYSQL_ROOT_PASSWORD",
      "label": "Root password",
      "description": "Password used by the root user."
    },
    {
      "name": "ENV_VAR_WITH_DEFAULT_VALUE",
      "default": "default_value",
      "preset": true
    },
    {
      "name": "ENV_VAR_WITH_SELECT_VALUE",
      "label": "An environment variable",
      "description": "A description for this env var",
      "select": [
        {
          "text": "Yes, I agree",
          "value": "Y",
          "default": true
        },
        {
          "text": "No, I disagree",
          "value": "N"
        },
        {
          "text": "Maybe",
          "value": "YN"
        }
      ],
      "description": "Some environment variable."
    }
  ]
}

note

  • Description: Extra information about a template, for example what it is used for. Displayed inside the template-creation form in the Portainer UI. Supports HTML.

  • Format: String

  • Valid values: Any string value.

  • Required/Optional: Optional

  • Example: See below.

{
  "note": "You can use this field to record extra information about a template."
}

platform

  • Description: The supported platform. Displays a small platform-related icon in the Portainer UI. Must contain a valid value.

  • Format: String

  • Valid values: "linux"; "windows"

  • Required/Optional: Optional

  • Example: See below.

{ "platform": "linux" }

categories

  • Description: An array of categories associated with a template. Populates the category filter in the Portainer UI.

  • Format: Array

  • Required/Optional: Optional

  • Example: See below.

{
  "categories": ["webserver", "open-source"]
PreviousBuild and host your own app templatesNextThe Portainer Edge Agent

Last updated 9 months ago

Was this helpful?