{"id":470,"date":"2026-10-14T15:41:07","date_gmt":"2026-10-14T15:41:07","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2016\/02\/23\/install-atlassian-jira-using-docker\/"},"modified":"2026-10-14T15:41:07","modified_gmt":"2026-10-14T15:41:07","slug":"install-atlassian-jira-using-docker","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/install-atlassian-jira-using-docker\/","title":{"rendered":"Install Atlassian Jira with Docker: Quick Start, Persistent Volumes, and Deployment Checks"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Running Jira in Docker is a fast way to stand up a lab, demo, or self-managed test instance. This updated guide keeps the original command, explains what it does, and adds safer patterns for persistence, repeatability, and operational checks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2016-02-23; fully revised and updated.<\/em><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2016\/02\/install-atlassian-jira-usin.png\" alt=\"install-atlassian-jira-using-docker\" width=\"600\" height=\"400\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">The original one-line Jira container command<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original post used this command to start Jira and publish the web UI on port 8080:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">docker run --detach --publish 8080:8080 cptactionhank\/atlassian-jira:latest<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">After startup, open <a href=\"http:\/\/localhost:8080\">http:\/\/localhost:8080<\/a> (or <code>http:\/\/[dockerhost]:8080<\/code>) and complete the Jira setup wizard.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jira-in-Docker workflow<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Choose image and tag] --> B[Prepare persistent storage]\n    B --> C[Run container with port mapping]\n    C --> D[Open setup wizard on port 8080]\n    D --> E[Configure Jira and admin account]\n    E --> F[Validate restart and data persistence]\n    F --> G[Add backup and upgrade process]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Quick-start options compared<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>Example<\/th><th>Persistence<\/th><th>Best for<\/th><\/tr><\/thead><tbody><tr><td>Original one-liner<\/td><td><code>docker run --detach --publish 8080:8080 cptactionhank\/atlassian-jira:latest<\/code><\/td><td>No explicit volume<\/td><td>Very quick local evaluation<\/td><\/tr><tr><td>Run with named volume<\/td><td><code>docker run --detach --name jira --publish 8080:8080 --volume jira_home:\/var\/atlassian\/jira cptactionhank\/atlassian-jira:latest<\/code><\/td><td>Yes<\/td><td>Local testing with retained data<\/td><\/tr><tr><td>Docker Compose baseline<\/td><td><code>docker compose up -d<\/code> from a compose file<\/td><td>Yes<\/td><td>Repeatable team setup<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Commands you can run now<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Original command from the post<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">docker run --detach --publish 8080:8080 cptactionhank\/atlassian-jira:latest<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Run with a named volume for Jira home data<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">docker volume create jira_home\n\ndocker run --detach \\\n  --name jira \\\n  --publish <span class=\"hljs-number\">8080<\/span>:<span class=\"hljs-number\">8080<\/span> \\\n  --volume jira_home:<span class=\"hljs-regexp\">\/var\/<\/span>atlassian\/jira \\\n  cptactionhank\/atlassian-jira:latest<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This keeps Jira home data in a Docker-managed volume so data can survive container recreation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Docker Compose baseline<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-yaml\">services:\n  jira:\n    image: cptactionhank\/atlassian-jira:latest\n    <span class=\"hljs-attr\">container_name<\/span>: jira\n    <span class=\"hljs-attr\">ports<\/span>:\n      - <span class=\"hljs-string\">\"8080:8080\"<\/span>\n    <span class=\"hljs-attr\">volumes<\/span>:\n      - jira_home:<span class=\"hljs-regexp\">\/var\/<\/span>atlassian\/jira\n    <span class=\"hljs-attr\">restart<\/span>: unless-stopped\n\n<span class=\"hljs-attr\">volumes<\/span>:\n  jira_home:<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">docker compose up -d<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Important paths from the original post<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Path<\/th><th>Meaning<\/th><th>Why it matters<\/th><\/tr><\/thead><tbody><tr><td><code>\/var\/atlassian\/jira<\/code><\/td><td>Jira home location<\/td><td>Persist this path to retain application data<\/td><\/tr><tr><td><code>\/opt\/atlassian\/jira<\/code><\/td><td>Jira installation location<\/td><td>Container image binaries live here<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">These paths were listed in the original article and are commonly used in Jira container images, but confirm against the exact image and tag you run.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Post-start validation checks<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">docker ps --filter name=jira\ndocker logs -f jira\ncurl -I http:<span class=\"hljs-comment\">\/\/localhost:8080<\/span>\n\ndocker restart jira\ndocker ps --filter name=jira<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\"><li>If the HTTP endpoint responds, the web service is reachable.<\/li><li>After restart, verify Jira can still access existing data and configuration.<\/li><li>If startup is slow, keep watching container logs until the web UI is ready.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reference and attribution<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Original post permalink: <a href=\"https:\/\/www.devopsschool.com\/blog\/install-atlassian-jira-using-docker\/\">https:\/\/www.devopsschool.com\/blog\/install-atlassian-jira-using-docker\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Original image\/reference source: <a href=\"https:\/\/hub.docker.com\/r\/cptactionhank\/atlassian-jira\/\">https:\/\/hub.docker.com\/r\/cptactionhank\/atlassian-jira\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The original page also contained a broken YouTube gallery embed; related troubleshooting link preserved here: <a href=\"https:\/\/www.youtube.com\/watch?v=ZCfrNvu6nMc\">https:\/\/www.youtube.com\/watch?v=ZCfrNvu6nMc<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices and common pitfalls<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Avoid unpinned tags<\/strong> for reproducible environments; use a specific image tag after validation.<\/li><li><strong>Persist Jira home data<\/strong> with a Docker volume or host mount before doing meaningful setup work.<\/li><li><strong>Validate image provenance<\/strong> and maintenance status, especially for community images.<\/li><li><strong>Plan backup and restore<\/strong> for Jira home data before upgrades or host changes.<\/li><li><strong>Treat this as a starting point<\/strong>; confirm current Atlassian guidance for production-grade deployments.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This guide shows how to run Jira in Docker using the original one-line command, then improve it with persistent storage and repeatable deployment steps. It also includes a workflow diagram, command examples, and practical validation checks.<\/p>\n","protected":false},"author":1,"featured_media":3198,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5106],"tags":[1190,567,1122,545,237,1191,595,1192,1193,593,104],"class_list":["post-470","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jira","tag-atlassian-jira","tag-docker","tag-guide","tag-how","tag-install","tag-install-atlassian-jira-using-docker","tag-jira","tag-jira-installation","tag-jira-installation-using-docker","tag-process","tag-tutorials"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/470","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=470"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/470\/revisions"}],"predecessor-version":[{"id":79355,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/470\/revisions\/79355"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3198"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=470"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=470"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=470"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}