{"id":5445,"date":"2021-08-12T03:15:08","date_gmt":"2021-08-12T03:15:08","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=5445"},"modified":"2025-07-30T06:50:25","modified_gmt":"2025-07-30T06:50:25","slug":"how-to-setup-docker-registry-repository-using-jfrog-artifactory","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/how-to-setup-docker-registry-repository-using-jfrog-artifactory\/","title":{"rendered":"How to Setup Docker Registry\/Repository on Jfrog Artifactory Pro On-Prem?"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">The Docker client limitations:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You cannot use a context path when providing the registry path (e.g localhost:8082\/artifactory is not valid)<\/li>\n\n\n\n<li>Docker will only send basic HTTP authentication when working against an HTTPS host or when using the insecure registry flag<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Artifactory offers solutions to these limitations<\/h2>\n\n\n\n<p>Artifactory offers solutions to these limitations allowing you to create and use any number of Docker registries.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Using a reverse proxy: &#8211; When used, a reverse proxy, maps Docker commands to one of the multiple Docker registries in Artifactory<\/li>\n\n\n\n<li>Without a reverse proxy: From version 5.8, Artifactory supports using Docker without the use of a reverse proxy allowing you to create and use multiple Docker registries in Artifactory out-of-the-box.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Using a Reverse Proxy<\/h1>\n\n\n\n<p>When using Artifactory with a reverse proxy, you need to map Docker commands to Docker registries in Artifactory using either<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The subdomain method,<\/li>\n\n\n\n<li>ports method or<\/li>\n\n\n\n<li>repository path method.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"456\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/Artifactory-DockerReverse-ProxyDiagram.png\" alt=\"\" class=\"wp-image-23217\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/Artifactory-DockerReverse-ProxyDiagram.png 750w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/Artifactory-DockerReverse-ProxyDiagram-300x182.png 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Ports method<\/h1>\n\n\n\n<p>With the ports method, a port number is mapped to each Artifactory Docker registry. While this is an easy way to get started, you will <strong>need to modify your reverse proxy configuration and add a new mapping for each new Docker registry you define in Artifactory<\/strong>. In addition, firewalls and other restrictions by your IT department may restrict port numbers making the ports method not feasible.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">The subdomain method<\/h1>\n\n\n\n<p>With the subdomain method, you only <strong>need to configure your reverse proxy once<\/strong>, and from then on, the mapping from Docker commands to Docker registries in Artifactory is dynamic and requires no further modification of your reverse proxy configuration.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Repository path method<\/h1>\n\n\n\n<p>The repository path method allows a single point of entry (URL) to access different repositories. This is done by <strong>embedding the name of the repository being accessed into the image path.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Step 1 &#8211; Register and Login bintray.com<\/h1>\n\n\n\n<p>Url &#8211; https:\/\/bintray.com\/<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Step 2 &#8211; Get a API key<\/h1>\n\n\n\n<p>Browse https:\/\/bintray.com\/profile\/edit &amp; Tab called &#8220;API Key&#8221;<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Step 3 &#8211; In Host Machine, Login to jfrog-docker-reg2.bintray.io<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">$ docker login -u scmgalaxy -p 543a55849465b127357a92231f63b321980f1fb jfrog-docker-reg2.bintray.io<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">Step 4 &#8211; Pull the Artifactory image.<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">$ docker pull jfrog-docker-reg2.bintray.io\/jfrog\/artifactory-pro:6.1.0<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">Step 5 &#8211; Run the Artifactory Image<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">$ docker run -d -p 8081:8081 jfrog-docker-reg2.bintray.io\/jfrog\/artifactory-pro:6.1.0<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">Step 6 &#8211; Browse the Artifactory<\/h1>\n\n\n\n<p>http:\/\/13.232.91.6:8081\/artifactory\/<br>admin \/ password<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Step 7 &#8211; Get a Artifactory trial License<\/h1>\n\n\n\n<p>Get a Trial Artifactory trial using <a href=\"https:\/\/jfrog.com\/artifactory\/free-trial\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/jfrog.com\/artifactory\/free-trial\/<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Step 8 &#8211; Apply License<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Step 9 &#8211; Create Docker repo using Artifactory<\/h1>\n\n\n\n<p>Create Docker repo using Artifactory and in Repo Advance Setting, use Docker Access Method &#8220;Repostory Path&#8221;. and Note down the Repo<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Step 10 &#8211; Convert Docker default https to http<\/h1>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"970\" height=\"263\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/image-19.png\" alt=\"\" class=\"wp-image-51018\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/image-19.png 970w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/image-19-300x81.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/image-19-768x208.png 768w\" sizes=\"auto, (max-width: 970px) 100vw, 970px\" \/><\/figure>\n\n\n\n<p>Convert Docker default https to http using<br>https:\/\/www.devopsschool.com\/blog\/setup-docker-service-to-use-insecurehttp-registry-instead-of-https\/<br>i.e &#8211; 13.232.91.6:8081<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Step 11 &#8211; Stop and Start Docker Engine<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">$ systemctl stop docker\n$ systemctl start docker\n$ docker start cont-id-artifactory<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">Step 12 &#8211; Login \/ Push \/ Pull now<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">$ docker login -u admin -p password 13.232.91.6:8081\n$ docker pull 13.232.91.6:8081\/REPO-KEY\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">IMAGE<\/span>&gt;<\/span>:<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">TAG<\/span>&gt;<\/span>\n$ docker push 13.232.91.6:8081\/REPO-KEY\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">IMAGE<\/span>&gt;<\/span>:<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">TAG<\/span>&gt;<\/span>\n$ docker push 13.232.91.6:8081\/rajesh\/xyz\n$ docker pull 13.232.91.6:8081\/rajesh\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">IMAGE<\/span>&gt;<\/span>:<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">TAG<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_92517\"><figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe loading=\"lazy\"  id=\"_ytid_75874\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_92517\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>The Docker client limitations: Artifactory offers solutions to these limitations Artifactory offers solutions to these limitations allowing you to create and use any number of Docker registries. Using a Reverse Proxy When using Artifactory with a reverse proxy, you need to map Docker commands to Docker registries in Artifactory using either Ports method With the&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[4879],"tags":[4880,1186,567,5087,5086,571],"class_list":["post-5445","post","type-post","status-publish","format-standard","hentry","category-artifactory","tag-artifactory","tag-containers","tag-docker","tag-jrfog","tag-registroy","tag-repository"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/5445","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=5445"}],"version-history":[{"count":17,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/5445\/revisions"}],"predecessor-version":[{"id":51019,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/5445\/revisions\/51019"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=5445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=5445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=5445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}