{"id":13405950,"url":"https://github.com/teamatldocker/jira","last_synced_at":"2025-03-14T10:32:11.425Z","repository":{"id":34402298,"uuid":"38330560","full_name":"teamatldocker/jira","owner":"teamatldocker","description":"Dockerized Atlassian Jira","archived":false,"fork":false,"pushed_at":"2022-10-06T11:23:57.000Z","size":333,"stargazers_count":439,"open_issues_count":14,"forks_count":223,"subscribers_count":36,"default_branch":"master","last_synced_at":"2024-07-31T19:48:44.067Z","etag":null,"topics":["atlassian","atlassian-jira","docker","jira","jira-container"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/teamatldocker/jira/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teamatldocker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-30T20:08:04.000Z","updated_at":"2024-07-17T14:17:14.000Z","dependencies_parsed_at":"2022-07-12T15:18:06.340Z","dependency_job_id":null,"html_url":"https://github.com/teamatldocker/jira","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teamatldocker%2Fjira","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teamatldocker%2Fjira/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teamatldocker%2Fjira/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teamatldocker%2Fjira/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teamatldocker","download_url":"https://codeload.github.com/teamatldocker/jira/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221458266,"owners_count":16825278,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atlassian","atlassian-jira","docker","jira","jira-container"],"created_at":"2024-07-30T19:02:16.831Z","updated_at":"2025-03-14T10:32:11.415Z","avatar_url":"https://github.com/teamatldocker.png","language":"Shell","funding_links":[],"categories":["Shell","Communication and Collaboration Tools","docker"],"sub_categories":["Version Control, Wiki, Knowledge base"],"readme":"# Dockerized Atlassian Jira\n\n## Introduction\nRun Jira Core, Jira Software, or Jira Service Desk in a Docker container.\n\n\"The best software teams ship early and often - Not many tools, one tool. Jira Software is built for every member of your software team to plan, track, and release great software.\" - [[Source](https://www.atlassian.com/software/jira)]\n\n## Products, Versions, and Tags\n\n| Product | Version | Tags |\n|---------|---------|-------|\n| [Jira Software](https://www.atlassian.com/software/jira) | 8.22.4 | latest, 8.22.4, latest.de, 8.22.4.de |\n| [Jira Service Desk](https://www.atlassian.com/software/jira/service-desk) | 4.22.4 | servicedesk, servicedesk.4.22.4, servicedesk.de, servicedesk.4.22.4.de |\n| [Jira Core](https://www.atlassian.com/software/jira/core) | 8.22.4 | core, core.8.22.4, core.de, core.8.22.4.de |\n\u003e On every release, the oldest and the newest tags are rebuild.\n\n## You may also like\n\n* [teamatldocker/confluence](https://github.com/teamatldocker/confluence): Create, organize, and discuss work with your team\n* [teamatldocker/bitbucket](https://github.com/teamatldocker/bitbucket): Code, Manage, Collaborate\n* [teamatldocker/crowd](https://github.com/teamatldocker/crowd): Identity management for web apps\n* [development - running this image for development including a debugger](https://github.com/teamatldocker/jira/tree/master/examples/debug)\n\n## Setup\n\n### Docker-Compose:\n\u003e Jira will be available at http://yourdockerhost\n\n~~~~\n$ curl -O https://raw.githubusercontent.com/teamatldocker/jira/master/docker-compose.yml\n$ docker-compose up -d\n~~~~\n\n### Docker-CLI:\n\u003e Jira will be available at http://yourdockerhost\n\u003e Data will be persisted inside docker volume `jiravolume`.\n\n~~~~\ndocker run -d -p 80:8080 -v jiravolume:/var/atlassian/jira --name jira teamatldocker/jira\n~~~~\n\n### Docker run\n\n#### 1. Start Database\n\u003e This uses the postgres image. Data will be persisted inside docker volume `postgresvolume`.\n\u003e Note: You should change the password!\n~~~~\ndocker network create jiranet\ndocker run --name postgres -d \\\n    --network jiranet \\\n    -v postgresvolume:/var/lib/postgresql \\\n    -e 'POSTGRES_USER=jira' \\\n    -e 'POSTGRES_PASSWORD=jellyfish' \\\n    -e 'POSTGRES_DB=jiradb' \\\n    -e 'POSTGRES_ENCODING=UNICODE' \\\n    -e 'POSTGRES_COLLATE=C' \\\n    -e 'POSTGRES_COLLATE_TYPE=C' \\\n    postgres:9.5-alpine\n~~~~\n\n#### 2. Start Jira\n~~~~\ndocker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n\t  -e \"JIRA_DATABASE_URL=postgresql://jira@postgres/jiradb\" \\\n\t  -e \"JIRA_DB_PASSWORD=jellyfish\"  \\\n\t  -p 80:8080 teamatldocker/jira\n~~~~\n\n## Proxy Configuration\n\nYou can specify your proxy host and proxy port with the environment variables JIRA_PROXY_NAME and JIRA_PROXY_PORT. The value will be set inside the Atlassian server.xml at startup!\n\nWhen you use HTTPS then you also have to include the environment variable JIRA_PROXY_SCHEME.\n\n### Example\n\u003e This will set the values inside the server.xml in `/opt/jira/conf/server.xml` and build the image with the current Jira release\n\n* Proxy Name: myhost.example.com\n* Proxy Port: 443\n* Poxy Protocol Scheme: https\n\n~~~~\ndocker run -d --name jira \\\n    -v jiravolume:/var/atlassian/jira \\\n    -e \"JIRA_PROXY_NAME=myhost.example.com\" \\\n    -e \"JIRA_PROXY_PORT=443\" \\\n    -e \"JIRA_PROXY_SCHEME=https\" \\\n    teamatldocker/jira\n~~~~\n\n## Database Setup for Official Database Images\n\n1. Start a database server.\n1. Create a database with the correct collate.\n1. Start Jira.\n\nExample with PostgreSQL:\n\nFirst start the database server:\n\n\u003e Note: Change Password!\n\n~~~~\ndocker network create jiranet\ndocker run --name postgres -d \\\n    --network jiranet \\\n    -e 'POSTGRES_USER=jira' \\\n    -e 'POSTGRES_PASSWORD=jellyfish' \\\n    postgres:9.5\n~~~~\n\n\u003e This is the official Postgres image.\n\nThen create the database with the correct collate:\n\n~~~~\ndocker run -it --rm \\\n    --network jiranet \\\n    postgres:9.5-alpine \\\n    sh -c 'exec createdb -E UNICODE -l C -T template0 jiradb -h postgres -p 5432 -U jira'\n~~~~\n\n\u003e Password is `jellyfish`. Creates the database `jiradb` under user `jira` with the correct encoding and collation.\n\nThen start Jira:\n\u003e  Start the Jira and link it to the postgres instance.\n\n~~~~\ndocker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n\t  -e \"JIRA_DATABASE_URL=postgresql://jira@postgres/jiradb\" \\\n\t  -e \"JIRA_DB_PASSWORD=jellyfish\" \\\n\t  -p 80:8080 teamatldocker/jira\n~~~~\n\n## Demo Database Setup\n\n\u003e Note: It's not recommended to use a default initialized database for Jira in production! The default databases are all using a not recommended collation! Please use this for demo purposes only!\n\nThis is a demo \"by foot\" using the docker cli. In this example, we setup an empty PostgreSQL container. Then we connect and configure the Jira accordingly. Afterwards, the Jira container can always resume on the database.\n\nSteps:\n\n* Start Database container\n* Start Jira\n\n### PostgreSQL\n\nLet's use a PostgreSQL image and set it up:\n\n#### PostgreSQL - official image\n\n~~~~\n$ docker network create jiranet\n$ docker run --name postgres -d \\\n    --network jiranet \\\n    -e 'POSTGRES_DB=jiradb' \\\n    -e 'POSTGRES_USER=jiradb' \\\n    -e 'POSTGRES_PASSWORD=jellyfish' \\\n    postgres:9.5-alpine\n~~~~\n\n#### PostgreSQL - community image\n\n~~~~\n$ docker run --name postgres -d \\\n    --network jiranet \\\n    -e 'DB_USER=jiradb' \\\n    -e 'DB_PASS=jellyfish' \\\n    -e 'DB_NAME=jiradb' \\\n    sameersbn/postgresql:9.5-4\n~~~~\n\nNow start the Jira container and let it use the container. On first startup you have to configure your Jira yourself and fill it with a test license. Afterwards every time you connect to a database the Jira configuration will be skipped.\n\n~~~~\n$ docker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n\t  -e \"JIRA_DATABASE_URL=postgresql://jiradb@postgres/jiradb\" \\\n\t  -e \"JIRA_DB_PASSWORD=jellyfish\" \\\n\t  -p 80:8080 teamatldocker/jira\n~~~~\n\n### MySQL\n\nLet's use a MySQL image and set it up:\n\n#### MySQL - official image\n\n~~~~\n$ docker network create jiranet\n$ docker run -d --name mysql \\\n    --network jiranet \\\n    -e 'MYSQL_ROOT_PASSWORD=verybigsecretrootpassword' \\\n    -e 'MYSQL_DATABASE=jiradb' \\\n    -e 'MYSQL_USER=jiradb' \\\n    -e 'MYSQL_PASSWORD=jellyfish' \\\n    mysql:5.6\n~~~~\n\nNow start the Jira container and let it use the container. On first startup you have to configure your Jira yourself and fill it with a test license. Afterwards every time you connect to a database the Jira configuration will be skipped.\n\n~~~~\n$ docker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n    -e \"JIRA_DATABASE_URL=mysql://jiradb@mysql/jiradb\" \\\n    -e \"JIRA_DB_PASSWORD=jellyfish\"  \\\n    -p 80:8080 \\\n    teamatldocker/jira\n~~~~\n\n### SQL Server\n\nStarting with version 7.8.0 of Jira, Atlassian no longer provides/uses the jTDS JDBC driver and instead bundles the Microsoft JDBC driver.  This proves to be a bit of a headache because while the jTDS driver used the conventional JDBC URL scheme, Microsoft's driver uses a non-standard JDBC URL scheme that departs wildly from the usual (see [Issue #72](https://github.com/teamatldocker/jira/issues/72) for details).  As a result of this deviation from the standard, users wishing to connect to a SQL Server database *MUST* encode their host/port/database information in the `JIRA_DATABASE_URL` and cannot leverage the individual `JIRA_DB_*` variables. Note that any additional driver properties needed can be appended in much the same was as `databaseName` is handled in the example below.\n\n~~~~\ndocker run \\\n    -d \\\n    --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n    -e \"JIRA_DATABASE_URL=sqlserver://MySQLServerHost:1433;databaseName=MyDatabase\" \\\n    -e \"JIRA_DB_USER=jira-app\" \\\n    -e \"JIRA_DB_PASSWORD=***\" \\\n    -p 8080:8080 \\\n    teamatldocker/jira\n~~~~\n\n## Database Wait Feature\n\nA Jira container can wait for the database container to start up. You have to specify the host and port of your database container and Jira will wait up to one minute for the database.\n\nYou can define the waiting parameters with the environment variables:\n\n* `DOCKER_WAIT_HOST`: The host to poll Mandatory!\n* `DOCKER_WAIT_PORT`: The port to poll Mandatory!\n* `DOCKER_WAIT_TIMEOUT`: The timeout in seconds. Optional! Default: 60\n* `DOCKER_WAIT_INTERVAL`: The time in seconds we should wait before polling the database again. Optional! Default: 5\n\nExample waiting for a PostgreSQL database:\n\nFirst start Jira:\n\n~~~~\ndocker network create jiranet\ndocker run --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n    -e \"DOCKER_WAIT_HOST=postgres\" \\\n    -e \"DOCKER_WAIT_PORT=5432\" \\\n\t  -e \"JIRA_DATABASE_URL=postgresql://jira@postgres/jiradb\" \\\n\t  -e \"JIRA_DB_PASSWORD=jellyfish\"  \\\n\t  -p 80:8080 teamatldocker/jira\n~~~~\n\n\u003e Waits at most 60 seconds for the database.\n\nStart the database within 60 seconds:\n\n~~~~\ndocker run --name postgres -d \\\n    --network jiranet \\\n    -v postgresvolume:/var/lib/postgresql \\\n    -e 'POSTGRES_USER=jira' \\\n    -e 'POSTGRES_PASSWORD=jellyfish' \\\n    -e 'POSTGRES_DB=jiradb' \\\n    -e 'POSTGRES_ENCODING=UNICODE' \\\n    -e 'POSTGRES_COLLATE=C' \\\n    -e 'POSTGRES_COLLATE_TYPE=C' \\\n    postgres:9.5-alpine\n~~~~\n\n# Build The Image\n\n```\ndocker-compose build jira\n```\n\nIf you want to build a specific release, just replace the version in .env and again run\n\n```\ndocker-compose build jirqa\n```\n\n* Proxy Name: myhost.example.com\n* Proxy Port: 443\n* Poxy Protocol Scheme: https\n\nJust type:\n\n~~~~\n$ docker run -d --name jira \\\n    -v jiravolume:/var/atlassian/jira \\\n    -e \"JIRA_PROXY_NAME=myhost.example.com\" \\\n    -e \"JIRA_PROXY_PORT=443\" \\\n    -e \"JIRA_PROXY_SCHEME=https\" \\\n    teamatldocker/jira\n~~~~\n\n\u003e Will set the values inside the server.xml in /opt/jira/conf/server.xml\n\n# NGINX HTTP Proxy\n\nThis is an example on running Atlassian Jira behind NGINX with 2 Docker commands!\n\nFirst start Jira:\n\n~~~~\n$ docker network create jiranet\n$ docker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n    -e \"JIRA_PROXY_NAME=192.168.99.100\" \\\n    -e \"JIRA_PROXY_PORT=80\" \\\n    -e \"JIRA_PROXY_SCHEME=http\" \\\n    teamatldocker/jira\n~~~~\n\n\u003e Example with dockertools\n\nThen start NGINX:\n\n~~~~\n$ docker run -d \\\n    -p 80:80 \\\n    --network jiranet \\\n    --name nginx \\\n    -e \"SERVER1REVERSE_PROXY_LOCATION1=/\" \\\n    -e \"SERVER1REVERSE_PROXY_PASS1=http://jira:8080\" \\\n    teamatldocker/nginx\n~~~~\n\n\u003e Jira will be available at http://192.168.99.100.\n\n# NGINX HTTPS Proxy\n\nThis is an example on running Atlassian Jira behind NGINX-HTTPS with2 Docker commands!\n\nNote: This is a self-signed certificate! Trusted certificates by letsencrypt are supported. Documentation can be found here: [teamatldocker/nginx](https://github.com/teamatldocker/nginx)\n\nFirst start Jira:\n\n~~~~\n$ docker network create jiranet\n$ docker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n    -e \"JIRA_PROXY_NAME=192.168.99.100\" \\\n    -e \"JIRA_PROXY_PORT=443\" \\\n    -e \"JIRA_PROXY_SCHEME=https\" \\\n    teamatldocker/jira\n~~~~\n\n\u003e Example with dockertools\n\nThen start NGINX:\n\n~~~~\n$ docker run -d \\\n    -p 443:443 \\\n    --name nginx \\\n    --network jiranet \\\n    -e \"SERVER1REVERSE_PROXY_LOCATION1=/\" \\\n    -e \"SERVER1REVERSE_PROXY_PASS1=http://jira:8080\" \\\n    -e \"SERVER1CERTIFICATE_DNAME=/CN=CrustyClown/OU=SpringfieldEntertainment/O=crusty.springfield.com/L=Springfield/C=US\" \\\n    -e \"SERVER1HTTPS_ENABLED=true\" \\\n    -e \"SERVER1HTTP_ENABLED=false\" \\\n    teamatldocker/nginx\n~~~~\n\n\u003e Jira will be available at https://192.168.99.100.\n\n## Configuration\n\n### A Word About Memory Usage\n\nJira like any Java application needs a huge amount of memory. If you limit the memory usage by using the Docker --mem option make sure that you give enough memory. Otherwise, Jira will begin to restart randomly.\n\nYou should give at least 1-2GB more than the JVM maximum memory setting to your container.\n\nJava JVM memory settings are applied by manipulating properties inside the `setenv.sh` file and this image can set those properties for you.\n\nThe following example applies the [minimum memory for Jira 8.0+](https://confluence.atlassian.com/adminjira/preparing-for-jira-8-0-955171967.html#PreparingforJira8.0-mem) of 2048 megabytes and a maximum of 8192 megabytes.\n\nThe correct properties from the Atlassian documentation are:\n- `JVM_MINIMUM_MEMORY`\n- `JVM_MAXIMUM_MEMORY`\n\nThe image will set those properties, if you precede the property name with `SETENV_`.\n\n~~~~\ndocker run -d -p 80:8080 --name jira \\\n    -v jiravolume:/var/atlassian/jira \\\n    -e \"SETENV_JVM_MINIMUM_MEMORY=2048m\" \\\n    -e \"SETENV_JVM_MAXIMUM_MEMORY=8192m\" \\\n    teamatldocker/jira\n~~~~\n\n### Jira Startup Plugin Purge\n\nYou can enable osgi plugin purge on startup and restarts. The image will merciless purge the direcories\n\n* /var/atlassian/jira/plugins/.bundled-plugins\n* /var/atlassian/jira/plugins/.osgi-plugins\n\nThis will help solving [corrupted plugin caches](https://confluence.atlassian.com/jirakb/troubleshooting-jira-startup-failed-error-394464512.html#TroubleshootingJIRAStartupFailedError-Cache). Make sure to [increasing the plugin timeout](https://confluence.atlassian.com/jirakb/troubleshooting-jira-startup-failed-error-394464512.html#TroubleshootingJIRAStartupFailedError-Time) because Jira will have to rebuild the whole cache at each startup.\n\nThis is controlled by the environment variable `JIRA_PURGE_PLUGINS_ONSTART`. Possible values:\n\n* `true`: Purge will be done each time container is started or restarted.\n* `false` (Default): No purge will be done.\n\nExample:\n\n~~~~\n$ docker run -d -p 80:8080 -v jiravolume:/var/atlassian/jira \\\n    -e \"JIRA_PURGE_PLUGINS_ONSTART=true\" \\\n    --name jira teamatldocker/jira\n~~~~\n\n# Jira SSO With Crowd\n\nYou enable Single Sign On with Atlassian Crowd. What is crowd?\n\n\"Users can come from anywhere: Active Directory, LDAP, Crowd itself, or any mix thereof. Control permissions to all your applications in one place – Atlassian, Subversion, Google Apps, or your own apps.\" - [Atlassian Crowd](https://www.atlassian.com/software/crowd/overview)\n\nThis is controlled by the environment variable `JIRA_CROWD_SSO`. Possible values:\n\n* `true`: Jira configuration will be set to Crowd SSO authentication class at every restart.\n* `false`: Jira configuration will be set to Jira Authentication class at every restart.\n* `ignore` (Default): Config will not be touched, current image setting will be taken.\n\nYou have to follow the manual for further settings inside Jira and Crowd: [Documentation](https://confluence.atlassian.com/crowd/integrating-crowd-with-atlassian-jira-192625.html)\n\nExample:\n\n~~~~\n$ docker run -d -p 80:8080 -v jiravolume:/var/atlassian/jira \\\n    -e \"JIRA_CROWD_SSO=true\" \\\n    --name jira teamatldocker/jira\n~~~~\n\n\u003e SSO will be activated, you will need Crowd in order to authenticate.\n\n## Custom Configuration\n\nYou can use your customized configuration, e.g. Tomcat's `server.xml`. This is necessary when you need to configure something inside Tomcat that cannot be achieved by this image's supported environment variables. I will give an example for `server.xml` any other configuration file works analogous.\n\n1. First create your own valid `server.xml`.\n1. Mount the file into the proper location inside the image. E.g. `/opt/jira/conf/server.xml`.\n1. Start Jira\n\n~~~~\ndocker run -d --name jira \\\n    -p 80:8080 \\\n    -v jiravolume:/var/atlassian/jira \\\n    -v $(pwd)/server.xml:/opt/jira/conf/server.xml \\\n    teamatldocker/jira\n~~~~\n\n\u003e Note: `server.xml` is located in the directory where the command is executed.\n\n### Extending This Image\n\nYou can easily extend this image with your own tooling by following the example below:\n\n~~~~\nFROM teamatldocker/jira\n\nUSER root\n\n... Install your tooling ...\n\nUSER jira\nCMD [\"jira\"]\n~~~~\n\n## Upgrading Jira\n\n### Run in debug mode\n\nThis description is without any guarantee as this procedure may get outdated or omit critical details which may lead to data loss. Use at own risk.\nIf you want to run Jira with a debug port, please see `examples/debug` - essentially what we do is\n - we add the debug port as an env parameter\n - we overwrite the start-jira.sh script so we do not user `catalina.sh run` as startup bun rater `catalina.sh jpda run` .. that is about anything we changed in there\n - we expose the port 5005 to the host so we can connect\n\nBefore you take any action make sure you can potentially upgrade:\n\n1. Check inside Jira administration panel if your installed plugins are all upwards compatible. Jira has a very good feedback system where you can see if you plugin provider is compatible to the latest Jira version.\n\n2. Check or ask inside this repository if anyone has tested the latest image. I have experienced issues when Jira has upgraded to a new major version: E.g. 6.x to 7.x. In this case sometimes the image has to be adapted. Minor versions and especially bugfix version can be usually be used without any problems.\n\nNow make a `Backup` in order to be able to fallback:\n\n1. Stop your database and Jira instance.\n2. Make a backup of your volumes. (Both Jira and database). For example use (https://github.com/blacklabelops/volumerize)[blacklabelops/volumerize] to backup your volume.\n\nNow `Upgrade` your Jira container:\n\n1. Remove your stopped Jira container: `docker rm your_jira_container_name`\n2. Upgrade your local image: `docker pull teamatldocker/jira:new_version`\n3. Use the same start command as the last container but with the new image `teamatldocker/jira:new_version`\n4. Jira will start its upgrading routine on both the local files and database. Run `docker logs -f your_jira_container_name` and lookout for error messages.\n\nNow `Test` your Jira instance:\n\n1. Login and check your functionality\n2. Check if all plugins are running\n3. Check Jira administration pannel for error messages\n\nTest okay?\n\nYour finished!\n\nTest not okay?\n\nRollback:\n\n1. Stop Jira and database instance.\n2. Play back your backup. E.g. delete volumes, create volumes and copy back old files. Both Jira and database! You can simplify things with blacklabelops/volumerize.\n3.  Remove your stopped Jira container: `docker rm your_jira_container_name`\n4. Use the same start command as the last container but with the old image `teamatldocker/jira:old_version`\n\n## Example\n\nLet's assume your running Jira 7.6.2 with my example setup and you want to upgrade to Jira 7.7.1.\n\nPostgreSQL has been started with the following settings:\n\n~~~~\n$ docker run --name postgres -d \\\n    --network jiranet \\\n    -v postgresvolume:/var/lib/postgresql \\\n    ...\n    postgres:9.5-alpine\n~~~~\n\nJira has been started with the following settings:\n\n~~~~\n$ docker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n\t  ...\n\t  -p 80:8080 teamatldocker/jira:7.6.2\n~~~~\n\nThis means:\n\n* Jira instance has name `jira` and data is inside volume `jiravolume` and has version `7.6.2`.\n* Database instance has name `postgres` and data is inside volume `postgresvolume`.\n\nStop both instance with the following commands:\n\n~~~~\n$ docker stop jira\n$ docker stop postgres\n~~~~\n\n\u003e Correct order is first Jira then database.\n\n`Backup` both volumes in order to be able to `Rollback`. In this example we use [blacklabelops/volumerize](https://github.com/blacklabelops/volumerize) to backup to another volume.\n\nRun the following command to backup both database and Jira in one simple step:\n\n~~~~\n$ docker run \\\n    --rm \\\n    -v jiravolume:/source/application_data:ro \\\n    -v postgresvolume:/source/application_database_data:ro \\\n    -v jirabackup:/backup \\\n    -e \"VOLUMERIZE_SOURCE=/source\" \\\n    -e \"VOLUMERIZE_TARGET=file:///backup\" \\\n    blacklabelops/volumerize backup\n~~~~\n\n\u003e `jiravolume` and `postgresvolume` will have a backup inside jirabackup.\n\nNow `Upgrade` Jira by switching the container to a new image:\n\n~~~~\n$ docker rm jira\n$ docker pull teamatldocker/jira:7.7.1\n~~~~\n\nStart the database and Jira with the same parameters as before but with the new image tag `7.7.1`:\n\n~~~~\n$ docker start postgres\n$ docker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n\t  ...\n\t  -p 80:8080 teamatldocker/jira:7.7.1\n~~~~\n\nWait until Jira has ended the upgrade procedure and your instance is available again!\n\n1. Login and check your functionality\n2. Check if all plugins are running\n3. Check the Jira administration panel for error messages\n\nIf everything looks good, you're finished!\n\nIf you encountered an issue, you can `Rollback` to the last version.\n\nStop both instance with the following commands:\n\n~~~~\ndocker stop jira\ndocker stop postgres\n~~~~\n\n`Restore` both volumes in order to be able to use the last version again. In this example we use [blacklabelops/volumerize](https://github.com/blacklabelops/volumerize) to restore from another volume.\n\nRun the following command to restore both database and Jira in one simple step:\n\n~~~~\n$ docker run \\\n    --rm \\\n    -v jiravolume:/source/application_data \\\n    -v postgresvolume:/source/application_database_data \\\n    -v jirabackup:/backup:ro \\\n    -e \"VOLUMERIZE_SOURCE=/source\" \\\n    -e \"VOLUMERIZE_TARGET=file:///backup\" \\\n    blacklabelops/volumerize restore\n~~~~\n\n\u003e Data will be written back to `jiravolume` and `postgresvolume`.\n\nStart the old version again:\n\nStart the database and Jira with the same parameters as before but with the old image `7.6.2`:\n\n~~~~\n$ docker start postgres\n$ docker rm jira\n$ docker run -d --name jira \\\n    --network jiranet \\\n    -v jiravolume:/var/atlassian/jira \\\n\t  ...\n\t  -p 80:8080 teamatldocker/jira:7.6.2\n~~~~\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteamatldocker%2Fjira","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteamatldocker%2Fjira","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteamatldocker%2Fjira/lists"}