goharbor/harbor · error
Error: storage driver %s is not supported, only the followin
Error message
Error: storage driver %s is not supported, only the following ones are supported: %s
What it means
Thrown by the legacy validator in make/photon/prepare/utils/misc.py when harbor.cfg's registry_storage_provider_name (after .strip()) is not one of filesystem, azure, gcs, s3, swift, oss. These are the Docker Distribution storage backends Harbor supports; the value goes straight into the rendered registry config, so an unknown name aborts prepare.
Source
Thrown at make/photon/prepare/utils/misc.py:44
cert_path = conf.get("configuration", "ssl_cert")
if not os.path.isfile(cert_path):
raise Exception(
"Error: The path for certificate: %s is invalid" % cert_path)
if not conf.has_option("configuration", "ssl_cert_key"):
raise Exception(
"Error: The protocol is https but attribute ssl_cert_key is not set")
cert_key_path = conf.get("configuration", "ssl_cert_key")
if not os.path.isfile(cert_key_path):
raise Exception(
"Error: The path for certificate key: %s is invalid" % cert_key_path)
# Storage validate
valid_storage_drivers = ["filesystem",
"azure", "gcs", "s3", "swift", "oss"]
storage_provider_name = conf.get(
"configuration", "registry_storage_provider_name").strip()
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)))
storage_provider_config = conf.get(
"configuration", "registry_storage_provider_config").strip()
if storage_provider_name != "filesystem":
if storage_provider_config == "":
raise Exception(
"Error: no provider configurations are provided for provider %s" % storage_provider_name)
def validate_crt_subj(dirty_subj):
subj_list = [item for item in dirty_subj.strip().split("/") \
if len(item.split("=")) == 2 and len(item.split("=")[1]) > 0]
return "/" + "/".join(subj_list)
def generate_random_string(length):
return ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(length))
View on GitHub (pinned to 7b2fd08cc5)
Solutions
- Set registry_storage_provider_name to an exact lowercase value: filesystem, azure, gcs, s3, swift, or oss
- For minio/ceph/wasabi use 's3' and configure regionendpoint in registry_storage_provider_config
- Re-run prepare
Example fix
# harbor.cfg (before) registry_storage_provider_name = S3 # after registry_storage_provider_name = s3
Defensive patterns
Strategy: validation
Validate before calling
VALID = {'filesystem', 'azure', 'gcs', 's3', 'swift', 'oss'}
name = conf.get('configuration', 'registry_storage_provider_name').strip()
if name not in VALID:
raise SystemExit('unsupported storage driver %r; use one of %s' % (name, sorted(VALID))) Prevention
- Storage driver names are lowercase and case-sensitive
- S3-compatible object stores are 's3', not their product names
- Diff harbor.cfg against the release template before upgrades
When it happens
Trigger: harbor.cfg contains a mistyped or wrong-case driver, e.g. 'registry_storage_provider_name = S3', 'FileSystem', 'minio', or an arbitrary backend name. The .strip() removes surrounding whitespace, but case and spelling must match exactly.
Common situations: harbor.cfg-era setups (Harbor < 1.8, or migrator processing them) copied from docs with case changes; assuming S3-compatible services have their own driver name.
Related errors
- Error: storage driver %s is not supported, only the followin
- Only can have one trace exporter at a time
- Error: no provider configurations are provided for provider
- Error: no provider configurations are provided for provider
- File {} not exist
AI-assisted analysis of goharbor/harbor@7b2fd08cc5 (2026-08-16).
Data as JSON: /api/errors/f36e2a3b79aa7582.
Report an issue: GitHub.