diff --git a/app/models/katello/repository.rb b/app/models/katello/repository.rb
index 6888d9e0b5a..b1ecad605a3 100644
--- a/app/models/katello/repository.rb
+++ b/app/models/katello/repository.rb
@@ -860,20 +860,40 @@ def self.search_by_content_label(_key, operator, value)
     end
 
     def self.safe_render_container_name(repository, pattern = nil)
-      if (pattern && !pattern.blank?) || (repository.environment && !repository.environment.registry_name_pattern.empty?)
+      #            pattern provided / env pattern provided
+      #                 |  00 |  01 |  11 |  10
+      # ----------------+-----+-----+-----+------
+      # env exists /  00|   4 | n/a | n/a |   4
+      # is cv default 01|   2 | n/a | n/a |   4
+      #               11|   2 |   1 |   1 |   1
+      #               10|   3 |   1 |   1 |   1
+      #
+      # This diagram shows the name to render given the properties of
+      # the container provided. Branches numbered as ordered below.
+      is_pattern_provided = pattern.present?
+      env_exists = repository.environment.present?
+      is_env_pattern_provided = env_exists && repository.environment.registry_name_pattern.present?
+      is_cv_default = repository.content_view.default?
+
+      if is_env_pattern_provided || (is_pattern_provided && env_exists)
         pattern ||= repository.environment.registry_name_pattern
         allowed_methods = {}
         allowed_vars = {}
-        scope_variables = {repository: repository, organization: repository.organization, product: repository.product,
-                           lifecycle_environment: repository.environment, content_view: repository.content_view_version.content_view,
-                           content_view_version: repository.content_view_version}
+        scope_variables = {
+          repository: repository,
+          organization: repository.organization,
+          product: repository.product,
+          lifecycle_environment: repository.environment,
+          content_view: repository.content_view_version.content_view,
+          content_view_version: repository.content_view_version
+        }
         box = Safemode::Box.new(repository, allowed_methods)
         erb = ERB.new(pattern)
         pattern = box.eval(erb.src, allowed_vars, scope_variables)
         return Repository.clean_container_name(pattern)
-      elsif repository.content_view.default?
+      elsif is_cv_default && !is_pattern_provided
         items = [repository.organization.label, repository.product.label, repository.label]
-      elsif repository.environment
+      elsif env_exists
         items = [repository.organization.label, repository.environment.label, repository.content_view.label, repository.product.label, repository.label]
       else
         items = [repository.organization.label, repository.content_view.label, repository.content_view_version.version, repository.product.label, repository.label]
diff --git a/test/models/content_view_test.rb b/test/models/content_view_test.rb
index 90f580c0154..8570d50f83d 100644
--- a/test/models/content_view_test.rb
+++ b/test/models/content_view_test.rb
@@ -375,7 +375,28 @@ def test_docker_repo_conflicts
       assert composite.errors.full_messages.first =~ /^Container Image repo '#{repo.name}' is present in multiple/
     end
 
-    def test_docker_repo_container_names
+    def test_docker_repo_container_name_overlap
+      product = create(:katello_product, provider: @organization.anonymous_provider, organization: @organization)
+      @dev.registry_name_pattern = "abcdef"
+
+      repo1_lib = create(:docker_repository, product: product, content_view_version: @organization.default_content_view.versions.first)
+      view1 = create(:katello_content_view, organization: @organization)
+      view1.repositories << repo1_lib
+      repo1_cv = create(:docker_repository, product: product, content_view_version: @organization.default_content_view.versions.first, library_instance_id: repo1_lib.id, environment: @dev)
+
+      repo2_lib = create(:docker_repository, product: product, content_view_version: @organization.default_content_view.versions.first)
+      view2 = create(:katello_content_view, organization: @organization)
+      view2.repositories << repo2_lib
+
+      assert_equal repo1_cv.container_repository_name, "abcdef"
+      error = assert_raises(ActiveRecord::RecordInvalid) do
+        create(:docker_repository, product: product, content_view_version: @organization.default_content_view.versions.first, library_instance_id: repo2_lib.id, environment: @dev)
+      end
+      match_regex = /.*Container repository name for repository .* is not unique and cannot be created in .*\. Its Container .* conflicts with an existing repository\..*/
+      assert_match match_regex, error.message
+    end
+
+    def test_docker_repo_container_name_resolution # rubocop:disable Metrics/AbcSize
       composite = ContentView.find(katello_content_views(:composite_view).id)
       product = create(:katello_product, provider: @organization.anonymous_provider, organization: @organization)
 
@@ -391,15 +412,18 @@ def test_docker_repo_container_names
       repo2_cv = build(:docker_repository, product: product, content_view_version: @organization.default_content_view.versions.first, library_instance_id: repo2_lib.id)
       version2 = create(:katello_content_view_version, :content_view => view2, :repositories => [repo2_cv])
 
-      composite.update(component_ids: [version1.id])
+      composite.update(component_ids: [version1.id, version2.id])
       assert composite.valid?
-      @dev.registry_name_pattern = "abcdef"
       assert composite.check_docker_repository_names!([@dev])
 
-      composite.update(component_ids: [version1.id, version2.id])
-      assert composite.valid?
-      assert_raises(RuntimeError) do
-        composite.check_docker_repository_names!([@dev])
+      # ensure that all containers are stored with the proper auto-generated names
+      [version1, version2].each do |version|
+        name = "#{@dev.organization.name.downcase.sub!(" ", "_")}-"\
+          "#{version.content_view.label.downcase}-"\
+          "#{version.content_view.content_view_versions[0].version.sub!(".", "_")}-"\
+          "#{version.repositories[0].product.label.downcase}-"\
+          "#{version.repositories[0].name.downcase.sub!(" ", "_")}"
+        assert_equal name, version.repositories[0].container_repository_name
       end
     end