goharbor/harbor · error · Exception
Error: no provider configurations are provided for provider
Error message
Error: no provider configurations are provided for provider %s
What it means
Thrown by validate() in make/photon/prepare/utils/configs.py when storage_provider_name is a non-filesystem driver but storage_provider_config is the empty string — i.e., a cloud storage backend was selected without any credentials/settings. Distribution cannot use s3/gcs/azure/swift/oss without their required options (bucket, region, keys), so prepare aborts. In the harbor.yml flow the parser stores provider options as a dict (and silently falls back to filesystem when the section is empty), so this exact raise mainly affects conf dicts built the legacy string way; the user-facing twin is misc.py:51 for harbor.cfg.
Source
Thrown at make/photon/prepare/utils/configs.py:56
if ('log_ep_host' in conf) and not conf['log_ep_host']:
raise Exception('Error: must set log endpoint host to enable external host')
if ('log_ep_port' in conf) and not conf['log_ep_port']:
raise Exception('Error: must set log endpoint port to enable external host')
if ('log_ep_protocol' in conf) and (conf['log_ep_protocol'] not in ['udp', 'tcp']):
raise Exception("Protocol in external log endpoint must be one of 'udp' or 'tcp' ")
# Storage validate
valid_storage_drivers = ["filesystem", "azure", "gcs", "s3", "swift", "oss"]
storage_provider_name = conf.get("storage_provider_name")
if storage_provider_name not in valid_storage_drivers:
raise Exception("Error: storage driver %s is not supported, only the following ones are supported: %s" % (
storage_provider_name, ",".join(valid_storage_drivers)))
# original is registry_storage_provider_config
storage_provider_config = conf.get("storage_provider_config")
if storage_provider_name != "filesystem":
if storage_provider_config == "":
raise Exception(
"Error: no provider configurations are provided for provider %s" % storage_provider_name)
# ca_bundle validate
if conf.get('registry_custom_ca_bundle_path'):
registry_custom_ca_bundle_path = conf.get('registry_custom_ca_bundle_path') or ''
if registry_custom_ca_bundle_path.startswith('/data/'):
ca_bundle_host_path = registry_custom_ca_bundle_path
else:
ca_bundle_host_path = os.path.join(host_root_dir, registry_custom_ca_bundle_path.lstrip('/'))
try:
uid = os.stat(ca_bundle_host_path).st_uid
st_mode = os.stat(ca_bundle_host_path).st_mode
except Exception as e:
logging.error(e)
raise Exception('Can not get file info')
err_msg = 'Cert File {} should be owned by user with uid 10000 or readable by others'.format(registry_custom_ca_bundle_path)
if uid == DEFAULT_UID and not owner_can_read(st_mode):
raise Exception(err_msg)
if uid != DEFAULT_UID and not other_can_read(st_mode):View on GitHub (pinned to 7b2fd08cc5)
Solutions
- Fill the provider section under 'storage_service:' in harbor.yml with the required keys for the driver (s3 needs region, bucket, accesskey, secretkey)
- In legacy harbor.cfg, set registry_storage_provider_config to the provider's comma-separated options
- If you meant to keep local disk, set the provider back to filesystem and remove the cloud section
- Re-run ./install.sh
Example fix
# harbor.yml (before)
storage_service:
s3:
# harbor.yml (after)
storage_service:
s3:
region: us-east-1
bucket: harbor-artifacts
accesskey: AKIA...
secretkey: <secret> Defensive patterns
Strategy: validation
Validate before calling
name = conf.get('storage_provider_name', 'filesystem')
prov = conf.get('storage_provider_config')
if name != 'filesystem' and not prov:
raise SystemExit('driver %s selected but no provider config given' % name) Prevention
- Never rename the driver without bringing its settings along
- Keep storage credentials in the storage_service section, not in env files
- After editing, grep the rendered /etc/registry config for the bucket/region to confirm
When it happens
Trigger: storage_provider_name = 's3' (or azure/gcs/swift/oss) while storage_provider_config == '' — typically a hand-built conf dict, a legacy harbor.cfg with empty registry_storage_provider_config, or a migration of an old cfg where the config line was dropped.
Common situations: Switching from filesystem to S3 and filling in the name but not the settings; harbor.cfg to harbor.yml migrations that lose the registry_storage_provider_config line; automation that sets only the driver name.
Related errors
- Error: storage driver %s is not supported, only the followin
- Error: no provider configurations are provided for provider
- Please specify hostname
- Protocol in external log endpoint must be one of 'udp' or 't
- Can not get file info
AI-assisted analysis of goharbor/harbor@7b2fd08cc5 (2026-08-16).
Data as JSON: /api/errors/5b8e291cf24cce6a.
Report an issue: GitHub.