{"id":7589,"date":"2019-03-11T22:56:00","date_gmt":"2019-03-11T22:56:00","guid":{"rendered":"https:\/\/octopuscs.com\/?p=7589"},"modified":"2024-09-25T23:02:48","modified_gmt":"2024-09-25T23:02:48","slug":"setup-a-disconnected-docker-registry-for-red-hat-openstack-13","status":"publish","type":"post","link":"https:\/\/octopuscs.com\/?p=7589","title":{"rendered":"Setup a Disconnected Docker Registry for Red Hat Openstack 13"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"7589\" class=\"elementor elementor-7589\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e110035 elementor-section-boxed elementor-section-height-default elementor-section-height-default rt-parallax-bg-no\" data-id=\"e110035\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3635d55\" data-id=\"3635d55\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5edba14 elementor-widget elementor-widget-text-editor\" data-id=\"5edba14\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Setup disconnected Docker registry for Rhosp 13<\/h2><p><strong>Pre-requisites:<\/strong><br \/>1.\u00a0\u00a0 \u00a0Server for registry that has 2 nics to connect to internet and disconnected servers<br \/>2.\u00a0\u00a0 \u00a0Director configured with latest minor release<br \/>3.\u00a0\u00a0 \u00a0Current Redhat subscription<br \/>4.\u00a0\u00a0 \u00a0Hundreds of GB free, preferably a TB. It is wise to have \/var as a separate mounted volume.<\/p><p>On registry run:<br \/><code>$ yum update -y<\/code><\/p><h2>Install the Offline registry and Tag the images<\/h2><p><code>$ yum install -y \u00a0docker-distribution docker yum-utils docker git wget git net-tools bind- bridge-utils bash-completion kexec-tools sos screen<\/code><br \/>For the registry itself \u2013 to use after images are pushed to the offline registry<br \/><code>$ systemctl enable docker<br \/>$ systemctl start docker<br \/>$ systemctl enable docker-distribution<br \/>$ systemctl start \u00a0docker-distribution<\/code><\/p><p>1.\u00a0\u00a0 \u00a0ONLY for registry server: edit \u00a0\/etc\/docker-distribution\/registry\/config.yml<br \/>Edit last line that has http address add the server domain name before the \u00a0:5000<br \/>2.\u00a0\u00a0 \u00a0Each server that uses the offline registry needs to have the following, using your domain name before :5000 this includes the registry and director<br \/><code>$ echo 'INSECURE_REGISTRY=\"--insecure-registry ol-rhel-disconnected-registry:5000\"' &gt;&gt; \/etc\/sysconfig\/docker<\/code><\/p><p>3.\u00a0\u00a0 \u00a0Each server that uses the offline registry needs to have\u00a0this.<\/p><p>For the offline registry server, which itself is completely online, Edit<br \/>\/etc\/containers\/registries.conf to the following did allow docker pull to work.<\/p><p>Add IP and port of insecure registries as well as registries. Remember to put apostrophes around inside the square brackets, as below. Replace &#8216;ol-rhel-disconnected-registry\u2019 with YOURDOMAIN or IP.<\/p><p># vi \/etc\/containers\/registries.conf<\/p><p><span style=\"color: #0554f2; font-family: Menlo, Consolas, monaco, monospace; font-size: 1em;\"># This is a system-wide configuration file used to<\/span><\/p><p><code><br \/>\n# keep track of registries for various container backends.<br \/># It adheres to TOML format and does not support recursive<br \/># lists of registries.<\/code><\/p><p><code><code><\/code><\/code><\/p><p># The default location for this configuration file is \/etc\/containers\/registries.conf.<\/p><p><code><code><\/code><\/code><\/p><p># The only valid categories are: &#8216;registries.search&#8217;, &#8216;registries.insecure&#8217;,<br \/># and &#8216;registries.block&#8217;.<\/p><p><code><code><\/code><\/code><\/p><p>[registries.search]<br \/>registries = [&#8216;ol-rhel-disconnected-registry:5000&#8217;, &#8216;registry.access.redhat.com&#8217;, &#8216;docker.io&#8217;, &#8216;registry.fedoraproject.org&#8217;, &#8216;quay.io&#8217;, &#8216;registry.centos.org&#8217;]<\/p><p><code><code><\/code><\/code><\/p><p># If you need to access insecure registries, add the registry&#8217;s fully-qualified name.<br \/># An insecure registry is one that does not have a valid SSL certificate or only does HTTP.<br \/>[registries.insecure]<br \/>registries = [&#8216;ol-rhel-disconnected-registry:5000&#8217;]<\/p><p><code><br \/>\n<\/code><\/p><p><code># If you need to block pull access from a registry, uncomment the section below<br \/># and add the registries fully-qualified name.<br \/>#<br \/># Docker only<br \/>[registries.block]<br \/>registries = []<\/code><br \/>The same file \/etc\/containers\/registries.conf on the servers\/director should have the public servers removed from search and even moved to the block setting, so they wont be tried by default. The file \u00a0looks like:<\/p><p><code>$ cat \/etc\/containers\/registries.conf<br \/># This is a system-wide configuration file used to<br \/># keep track of registries for various container backends.<br \/># It adheres to TOML format and does not support recursive<br \/># lists of registries.<\/code><\/p><p><code># The default location for this configuration file is \/etc\/containers\/registries.conf.<br \/># The only valid categories are: 'registries.search', 'registries.insecure',<br \/># and 'registries.block'.<\/code><\/p><p><code>[registries.search]<br \/>registries = ['ol-rhel-disconnected-registry:5000']<\/code><\/p><p><code># If you need to access insecure registries, add the registry's fully-qualified name.<br \/># An insecure registry is one that does not have a valid SSL certificate or only does HTTP.<br \/>[registries.insecure]<br \/>registries = ['ol-rhel-disconnected-registry']<\/code><\/p><p><code># If you need to block pull access from a registry, uncomment the section below<br \/># and add the registries fully-qualified name.<br \/>#<br \/># Docker only<br \/>[registries.block]<br \/>registries = ['registry.access.redhat.com', 'docker.io', 'registry.fedoraproject.org', 'quay.io', 'registry.centos.org']<\/code><\/p><p>Restart Docker<\/p><p><code># systemctl restart docker<br \/># systemctl restart docker-distribution<\/code><\/p><p>On registry download, tag and push the images. This is simpler than Red Hat Openshift since all containers are standard tags<br \/>From Red Hat registry.<\/p><p>For testing purposes I ran this from the registry server instead of the director, I used a slightly different command to create the overcloud-images.yaml file<\/p><p>I ran the pull-tag-push script on the registry, then from the director I ran \u00a0the openstack command to create overcloud-images.yaml<\/p><p>Here are the scripts that I ran:<br \/>From registry:<\/p><p><code>#!\/bin\/bash<br \/>if \u00a0test -n \"$STY\"<br \/>then<br \/>printf \"This is a screen session named '$STY'.\\n\"<\/code><\/p><p><code>ASSET_SERVER=ol-rhel-disconnected-registry<br \/>docker search registry.access.redhat.com\/rhosp13| awk '{print $2}' | grep ^registry.access.redhat.com | while read IMAGE_NAME<br \/>do<br \/>TAG=13.0<br \/>echo \"Pulling ${IMAGE_NAME}:${TAG} ...\"<br \/>docker pull ${IMAGE_NAME}:${TAG}<br \/>IMAGE_PATH=$(echo ${IMAGE_NAME} | cut -f2- -d\/)<br \/>docker tag ${IMAGE_NAME}:${TAG} ${ASSET_SERVER}:5000\/${IMAGE_PATH}:${TAG}<br \/>docker tag ${ASSET_SERVER}:5000\/${IMAGE_PATH}:${TAG} ${ASSET_SERVER}:5000\/${IMAGE_PATH}:latest<br \/>docker push ${ASSET_SERVER}:5000\/${IMAGE_PATH}<br \/>done<br \/>else printf \"This is NOT a screen session.\\n\"<br \/>exit 1<br \/>fi<\/code><\/p><p>to create the overcloud-images.yaml file<\/p><p><code>$ openstack overcloud container image prepare --namespace=ol-rhel-disconnected-registry\/rhosp13 --prefix=openstack- --tag 13.0 \u00a0 --output-env-file=\/home\/stack\/test-disconnect-overcloud_images.yaml<\/code><\/p><p>On a real director the script and command should be:<\/p><p><code>#!\/bin\/bash<br \/>if \u00a0test -n \"$STY\"<br \/>then<br \/>printf \"This is a screen session named '$STY'.\\n\"<\/code><\/p><p><code>ASSET_SERVER=ol-rhel-disconnected-registry<br \/>docker search registry.access.redhat.com\/rhosp13| awk '{print $2}' | grep ^registry.access.redhat.com | while read IMAGE_NAME<br \/>do<br \/>TAG=$(openstack overcloud container image tag discover --image ${IMAGE_NAME} --tag-from-label {version}-{release})<br \/>echo \"Pulling ${IMAGE_NAME}:${TAG} ...\"<br \/>docker pull ${IMAGE_NAME}:${TAG}<br \/>IMAGE_PATH=$(echo ${IMAGE_NAME} | cut -f2- -d\/)<br \/>docker tag ${IMAGE_NAME}:${TAG} ${ASSET_SERVER}:5000\/${IMAGE_PATH}:${TAG}<br \/>docker tag ${ASSET_SERVER}:5000\/${IMAGE_PATH}:${TAG} ${ASSET_SERVER}:5000\/${IMAGE_PATH}:latest<br \/>docker push ${ASSET_SERVER}:5000\/${IMAGE_PATH}<br \/>done<br \/>else printf \"This is NOT a screen session.\\n\"<br \/>exit 1<br \/>fi<\/code><\/p><p>The openstack command to build the overcloud-images should be<\/p><p><code>$ openstack overcloud container image prepare --namespace=ol-rhel-disconnected-registry:5000\/rhosp13 --prefix=openstack- --tag-from-label {version}-{release} --output-env-file=\/home\/stack\/test-disconnect-overcloud_images.yaml<\/code><\/p><p>I am unsure whether DockerInsecureRegistryAddress needs to be manually added to overcloud-images.yaml<\/p><p>DockerInsecureRegistryAddress: [&#8216;myregistry.local:8787&#8217;]<\/p><h3><strong>Troubleshooting<\/strong><\/h3><p>When building the overcloud-images.yaml file. I got an error<\/p><p>Not found image: docker:\/\/ol-rhel-disconnected-registry:5000\/rhosp13\/openstack-gnocchi-statsd:latest<br \/>time=&#8221;2019-03-12T09:40:48+02:00&#8243; level=fatal msg=&#8221;Error reading manifest latest in ol-rhel-disconnected-registry:5000\/rhosp13\/openstack-gnocchi-statsd: manifest unknown: manifest unknown&#8221;<\/p><p>to solve, I manually downloaded and tagged the image.<\/p><p>[root@rhel-disconnected-registry cloud-user]# \u00a0docker tag \u00a0registry.redhat.io\/rhosp13\/openstack-gnocchi-statsd:13.0 ol-rhel-disconnected-registry:5000\/rhosp13\/openstack-gnocchi-statsd:latest<br \/>[root@rhel-disconnected-registry cloud-user]# \u00a0docker tag \u00a0registry.redhat.io\/rhosp13\/openstack-gnocchi-statsd:13.0<\/p><p>ol-rhel-disconnected-registry:5000\/rhosp13\/openstack-gnocchi-statsd:13.0<br \/>[root@rhel-disconnected-registry cloud-user]# \u00a0docker push ol-rhel-disconnected-registry:5000\/rhosp13\/openstack-gnocchi-statsd:latest<br \/>[root@rhel-disconnected-registry cloud-user]# \u00a0docker push ol-rhel-disconnected-registry:5000\/rhosp13\/openstack-gnocchi-statsd:13.0<\/p><p>When building the overcloud-images.yaml file, If you get the following error, you will need to either label each image as told by error or change the tag variable to 13.0 as in the first script :<\/p><p>Image ol-rhel-disconnected-registry:5000\/rhosp13\/openstack-aodh-notifier has no tag 13.0-66.<br \/>Available tags: 13.0, latest<\/p><p>For monitoring you will need to add to the overcloud-image.yaml creation:<\/p><p>-e \/usr\/share\/openstack-tripleo-heat-templates\/environments\/services-docker\/fluentd-client.yaml \\<br \/>-e \/usr\/share\/openstack-tripleo-heat-templates\/environments\/services-docker\/sensu-client.yaml \\<br \/>-e \/usr\/share\/openstack-tripleo-heat-templates\/environments\/services-docker\/collectd.yaml \\<br \/>&#8211;output-env-file \/home\/stack\/templates\/overcloud_images.yaml<\/p><p>Octopus Computer Solutions is a<a href=\"https:\/\/redhat.secure.force.com\/finder\/PFPartnerDetail?id=001f200001WQkMRAA1\" target=\"_blank\" rel=\"noopener\">\u00a0Red Hat business partner.<\/a>\u00a0We deploy\u00a0<a href=\"http:\/\/octopuscs.com\/openstack\">OpenStack<\/a>\u00a0and\u00a0<a href=\"http:\/\/octopuscs.com\/services\/openshift-deployment\">OpenShift<\/a>\u00a0throughout Israel and the world.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Setup disconnected Docker registry for Rhosp 13 Pre-requisites:1.\u00a0\u00a0 \u00a0Server for registry that has 2 nics to connect to internet and disconnected servers2.\u00a0\u00a0 \u00a0Director configured with latest minor release3.\u00a0\u00a0 \u00a0Current Redhat subscription4.\u00a0\u00a0 \u00a0Hundreds of GB free, preferably a TB. It is wise to have \/var as a separate mounted volume. On registry run:$ yum update -y [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":7579,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68],"tags":[107,108,106,73,71],"class_list":["post-7589","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles","tag-air-gapped","tag-disconnected","tag-docker-registry","tag-openstack","tag-red-hat"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Setup a Disconnected Docker Registry for Red Hat Openstack 13 - Octopus Computer Solutions<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/octopuscs.com\/?p=7589\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Setup a Disconnected Docker Registry for Red Hat Openstack 13 - Octopus Computer Solutions\" \/>\n<meta property=\"og:description\" content=\"Setup disconnected Docker registry for Rhosp 13 Pre-requisites:1.\u00a0\u00a0 \u00a0Server for registry that has 2 nics to connect to internet and disconnected servers2.\u00a0\u00a0 \u00a0Director configured with latest minor release3.\u00a0\u00a0 \u00a0Current Redhat subscription4.\u00a0\u00a0 \u00a0Hundreds of GB free, preferably a TB. It is wise to have \/var as a separate mounted volume. On registry run:$ yum update -y [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/octopuscs.com\/?p=7589\" \/>\n<meta property=\"og:site_name\" content=\"Octopus Computer Solutions\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/octopuscs\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-11T22:56:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-25T23:02:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1437\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Daniel Kallner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@octopuscs\" \/>\n<meta name=\"twitter:site\" content=\"@octopuscs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Kallner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589\"},\"author\":{\"name\":\"Daniel Kallner\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#\\\/schema\\\/person\\\/b10d071ebda1e3f3d371a8ef9eb1ea73\"},\"headline\":\"Setup a Disconnected Docker Registry for Red Hat Openstack 13\",\"datePublished\":\"2019-03-11T22:56:00+00:00\",\"dateModified\":\"2024-09-25T23:02:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589\"},\"wordCount\":637,\"publisher\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/octopuscs.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg\",\"keywords\":[\"air-gapped\",\"disconnected\",\"docker registry\",\"openstack\",\"red hat\"],\"articleSection\":[\"Articles\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589\",\"url\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589\",\"name\":\"Setup a Disconnected Docker Registry for Red Hat Openstack 13 - Octopus Computer Solutions\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/octopuscs.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg\",\"datePublished\":\"2019-03-11T22:56:00+00:00\",\"dateModified\":\"2024-09-25T23:02:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/octopuscs.com\\\/?p=7589\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589#primaryimage\",\"url\":\"https:\\\/\\\/octopuscs.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/octopuscs.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg\",\"width\":2560,\"height\":1437},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/?p=7589#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/octopuscs.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Setup a Disconnected Docker Registry for Red Hat Openstack 13\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#website\",\"url\":\"https:\\\/\\\/octopuscs.com\\\/\",\"name\":\"Octopus Computer Solutions\",\"description\":\"Your Cloud Experts\",\"publisher\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/octopuscs.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#organization\",\"name\":\"Octopus Computer Solutions\",\"url\":\"https:\\\/\\\/octopuscs.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/octopuscs.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/ocs_logo_round_corners.png\",\"contentUrl\":\"https:\\\/\\\/octopuscs.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/ocs_logo_round_corners.png\",\"width\":1032,\"height\":242,\"caption\":\"Octopus Computer Solutions\"},\"image\":{\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/octopuscs\\\/\",\"https:\\\/\\\/x.com\\\/octopuscs\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/octopuscs\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/octopuscs.com\\\/#\\\/schema\\\/person\\\/b10d071ebda1e3f3d371a8ef9eb1ea73\",\"name\":\"Daniel Kallner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c013b490ec8085b52a2fe1ebe9755ae9adaac911296ed56566e288c421a9136?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c013b490ec8085b52a2fe1ebe9755ae9adaac911296ed56566e288c421a9136?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c013b490ec8085b52a2fe1ebe9755ae9adaac911296ed56566e288c421a9136?s=96&d=mm&r=g\",\"caption\":\"Daniel Kallner\"},\"url\":\"https:\\\/\\\/octopuscs.com\\\/?author=3\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Setup a Disconnected Docker Registry for Red Hat Openstack 13 - Octopus Computer Solutions","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/octopuscs.com\/?p=7589","og_locale":"en_US","og_type":"article","og_title":"Setup a Disconnected Docker Registry for Red Hat Openstack 13 - Octopus Computer Solutions","og_description":"Setup disconnected Docker registry for Rhosp 13 Pre-requisites:1.\u00a0\u00a0 \u00a0Server for registry that has 2 nics to connect to internet and disconnected servers2.\u00a0\u00a0 \u00a0Director configured with latest minor release3.\u00a0\u00a0 \u00a0Current Redhat subscription4.\u00a0\u00a0 \u00a0Hundreds of GB free, preferably a TB. It is wise to have \/var as a separate mounted volume. On registry run:$ yum update -y [&hellip;]","og_url":"https:\/\/octopuscs.com\/?p=7589","og_site_name":"Octopus Computer Solutions","article_publisher":"https:\/\/www.facebook.com\/octopuscs\/","article_published_time":"2019-03-11T22:56:00+00:00","article_modified_time":"2024-09-25T23:02:48+00:00","og_image":[{"width":2560,"height":1437,"url":"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Daniel Kallner","twitter_card":"summary_large_image","twitter_creator":"@octopuscs","twitter_site":"@octopuscs","twitter_misc":{"Written by":"Daniel Kallner","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/octopuscs.com\/?p=7589#article","isPartOf":{"@id":"https:\/\/octopuscs.com\/?p=7589"},"author":{"name":"Daniel Kallner","@id":"https:\/\/octopuscs.com\/#\/schema\/person\/b10d071ebda1e3f3d371a8ef9eb1ea73"},"headline":"Setup a Disconnected Docker Registry for Red Hat Openstack 13","datePublished":"2019-03-11T22:56:00+00:00","dateModified":"2024-09-25T23:02:48+00:00","mainEntityOfPage":{"@id":"https:\/\/octopuscs.com\/?p=7589"},"wordCount":637,"publisher":{"@id":"https:\/\/octopuscs.com\/#organization"},"image":{"@id":"https:\/\/octopuscs.com\/?p=7589#primaryimage"},"thumbnailUrl":"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg","keywords":["air-gapped","disconnected","docker registry","openstack","red hat"],"articleSection":["Articles"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/octopuscs.com\/?p=7589","url":"https:\/\/octopuscs.com\/?p=7589","name":"Setup a Disconnected Docker Registry for Red Hat Openstack 13 - Octopus Computer Solutions","isPartOf":{"@id":"https:\/\/octopuscs.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/octopuscs.com\/?p=7589#primaryimage"},"image":{"@id":"https:\/\/octopuscs.com\/?p=7589#primaryimage"},"thumbnailUrl":"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg","datePublished":"2019-03-11T22:56:00+00:00","dateModified":"2024-09-25T23:02:48+00:00","breadcrumb":{"@id":"https:\/\/octopuscs.com\/?p=7589#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/octopuscs.com\/?p=7589"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/octopuscs.com\/?p=7589#primaryimage","url":"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg","contentUrl":"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg","width":2560,"height":1437},{"@type":"BreadcrumbList","@id":"https:\/\/octopuscs.com\/?p=7589#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/octopuscs.com\/"},{"@type":"ListItem","position":2,"name":"Setup a Disconnected Docker Registry for Red Hat Openstack 13"}]},{"@type":"WebSite","@id":"https:\/\/octopuscs.com\/#website","url":"https:\/\/octopuscs.com\/","name":"Octopus Computer Solutions","description":"Your Cloud Experts","publisher":{"@id":"https:\/\/octopuscs.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/octopuscs.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/octopuscs.com\/#organization","name":"Octopus Computer Solutions","url":"https:\/\/octopuscs.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/octopuscs.com\/#\/schema\/logo\/image\/","url":"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/ocs_logo_round_corners.png","contentUrl":"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/ocs_logo_round_corners.png","width":1032,"height":242,"caption":"Octopus Computer Solutions"},"image":{"@id":"https:\/\/octopuscs.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/octopuscs\/","https:\/\/x.com\/octopuscs","https:\/\/www.linkedin.com\/company\/octopuscs"]},{"@type":"Person","@id":"https:\/\/octopuscs.com\/#\/schema\/person\/b10d071ebda1e3f3d371a8ef9eb1ea73","name":"Daniel Kallner","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/8c013b490ec8085b52a2fe1ebe9755ae9adaac911296ed56566e288c421a9136?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8c013b490ec8085b52a2fe1ebe9755ae9adaac911296ed56566e288c421a9136?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8c013b490ec8085b52a2fe1ebe9755ae9adaac911296ed56566e288c421a9136?s=96&d=mm&r=g","caption":"Daniel Kallner"},"url":"https:\/\/octopuscs.com\/?author=3"}]}},"jetpack_featured_media_url":"https:\/\/octopuscs.com\/wp-content\/uploads\/2024\/09\/taylor-vick-M5tzZtFCOfs-unsplash-scaled.jpg","_links":{"self":[{"href":"https:\/\/octopuscs.com\/index.php?rest_route=\/wp\/v2\/posts\/7589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/octopuscs.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/octopuscs.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/octopuscs.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/octopuscs.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7589"}],"version-history":[{"count":10,"href":"https:\/\/octopuscs.com\/index.php?rest_route=\/wp\/v2\/posts\/7589\/revisions"}],"predecessor-version":[{"id":7599,"href":"https:\/\/octopuscs.com\/index.php?rest_route=\/wp\/v2\/posts\/7589\/revisions\/7599"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/octopuscs.com\/index.php?rest_route=\/wp\/v2\/media\/7579"}],"wp:attachment":[{"href":"https:\/\/octopuscs.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/octopuscs.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/octopuscs.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}