testcontainers/testcontainers-java · error · UnsupportedOperationException

Setting a in not supported in the versions below 22.1.0

Error message

Setting a %s in not supported in the versions below 22.1.0

What it means

CockroachContainer only supports configuring username/password/database via env vars for image versions >= 22.1.0 (FIRST_VERSION_WITH_ENV_VARS_SUPPORT). Calling withUsername/withPassword/withDatabaseName on an older tagged image throws UnsupportedOperationException naming the parameter and the 22.1.0 cutoff.

Solutions

  1. Upgrade the image to >= 22.1.0, e.g. cockroachdb/cockroach:v22.1.0 or later
  2. If the old version is required, drop the withUsername/withPassword/withDatabaseName calls and rely on defaults (root user, insecure/dev mode)
  3. Ensure the docker image name contains a parseable version part so the version check works

Example fix

// before
new CockroachContainer("cockroachdb/cockroach:v21.2.3").withDatabaseName("testdb").withUsername("app");
// after
new CockroachContainer("cockroachdb/cockroach:v22.1.0").withDatabaseName("testdb").withUsername("app");
Defensive patterns

Strategy: validation

Validate before calling

String tag = imageName.substring(imageName.indexOf(':') + 1);
int minor = Integer.parseInt(tag.replaceAll("[^0-9.]+", "").split("\\.")[1]);
if (minor < 1 || parseVersion(tag) < 22.1) { /* skip withUsername/withPassword/withDatabaseName */ }

Try / catch

try { container.withUsername("app"); } catch (UnsupportedOperationException e) { /* use default root user for pre-22.1 images */ }

Prevention

When it happens

Trigger: new CockroachContainer("cockroachdb/cockroach:v21.2.3").withUsername("foo") (or withPassword/withDatabaseName) — validateIfVersionSupportsUsernameOrPasswordOrDatabase fails isVersionGreaterThanOrEqualTo221.

Common situations: Pinning an older CockroachDB image for compatibility testing and reusing container setup code written for 22.1+; unparseable or missing version part in the image tag.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of testcontainers/testcontainers-java@8e549514e3 (2026-09-12). Data as JSON: /api/errors/a1819d43f62d0288. Report an issue: GitHub.

Appendix: source

Thrown at modules/cockroachdb/src/main/java/org/testcontainers/cockroachdb/CockroachContainer.java:148

        this.password = password;
        return this;
    }

    @Override
    public CockroachContainer withDatabaseName(final String databaseName) {
        validateIfVersionSupportsUsernameOrPasswordOrDatabase("databaseName");
        this.databaseName = databaseName;
        return this;
    }

    private boolean isVersionGreaterThanOrEqualTo221(DockerImageName dockerImageName) {
        ComparableVersion version = new ComparableVersion(dockerImageName.getVersionPart().replaceFirst("v", ""));
        return version.isGreaterThanOrEqualTo(FIRST_VERSION_WITH_ENV_VARS_SUPPORT);
    }

    private void validateIfVersionSupportsUsernameOrPasswordOrDatabase(String parameter) {
        if (!isVersionGreaterThanOrEqualTo221) {
            throw new UnsupportedOperationException(
                String.format("Setting a %s in not supported in the versions below 22.1.0", parameter)
            );
        }
    }

    @Override
    protected void waitUntilContainerStarted() {
        getWaitStrategy().waitUntilReady(this);
    }
}

View on GitHub (pinned to 8e549514e3)