![]() |
VOOZH | about |
Liquibase Community
10M+
The Liquibase Community Docker images (liquibase/liquibase) are built from the docker/ directory of the liquibase/liquibase repository. They were previously maintained in the now-deprecated liquibase/docker repository — please file Docker image issues and PRs in liquibase/liquibase.
Looking for Liquibase Secure? The commercial
liquibase/liquibase-secureimage is published on Docker Hub and maintained internally by Liquibase. For licensing see liquibase.com/liquibase-secure; for issues contact Liquibase Support.
Starting with Liquibase 5.0, we have introduced a clear separation between our open source Community edition and our commercial Secure offering:
liquibase/liquibase (Community Edition): Community version under the Functional Source License (FSL)liquibase/liquibase-secure (Secure Edition): Commercial version with enterprise featuresIf you have a valid Liquibase License Key, you should now use liquibase/liquibase-secure instead of liquibase/liquibase.
| Version Range | Community Image | Secure Image | License | Docker Official |
|---|---|---|---|---|
| 5.0+ | liquibase/liquibase | liquibase/liquibase-secure | FSL* / Commercial | ❌ No** |
| 4.x | liquibase:4.x***liquibase/liquibase | liquibase/liquibase-secure | Apache 2.0 / Commercial | ✅ Yes*** (Community only) |
liquibase/liquibase (not available as official Docker image).docker pull liquibase:4.x.As of Liquibase 5.0, the Community edition (liquibase/liquibase) and the official Docker Community liquibase image no longer include database drivers or extensions by default.
What this means for you:
INSTALL_MYSQL=true environment variable is still supportedLearn more: Liquibase 5.0 Release Announcement
FROM liquibase/liquibase:latest
# Add database drivers as needed
RUN lpm add mysql --global
RUN lpm add postgresql --global
RUN lpm add mssql --global
We publish Liquibase Community images to multiple registries for flexibility:
| Registry | Community Image |
|---|---|
| Docker Hub (default) | liquibase/liquibase |
| GitHub Container Registry | ghcr.io/liquibase/liquibase |
| Amazon ECR Public | public.ecr.aws/liquibase/liquibase |
Liquibase Secure images (liquibase/liquibase-secure) are also published to all three registries — see the Docker Hub overview for details.
# Pull the community image
docker pull liquibase/liquibase:5.0.1
# Run with a changelog
docker run --rm \
-v /path/to/changelog:/liquibase/changelog \
-e LIQUIBASE_COMMAND_URL="jdbc:postgresql://localhost:5432/mydb" \
-e LIQUIBASE_COMMAND_USERNAME="username" \
-e LIQUIBASE_COMMAND_PASSWORD="password" \
liquibase/liquibase update
If you have a commercial license, use the liquibase/liquibase-secure image instead — usage instructions are in its Docker Hub overview.
If you're still using Liquibase 4, you can pull from either the official Docker repository or the community registry:
Official Docker Repository:
# Pull the latest Liquibase 4 image
docker pull liquibase:latest
# Or pull a specific version
docker pull liquibase:4.x
Community Registry:
# Pull from community registry
docker pull liquibase/liquibase:4.x
If you're upgrading from Liquibase 4 to 5.0, follow these steps:
Read more: Liquibase License Information
Use Community Edition if:
Use Secure Edition if:
If using Community Edition:
# Before (Liquibase 4)
FROM liquibase/liquibase:4.x
# After (Liquibase 5.0+)
FROM liquibase/liquibase:5.0 # or :latest
If using PRO Edition: move to the liquibase/liquibase-secure image (liquibase/liquibase-pro:4.x → liquibase/liquibase-secure:5.0).
Liquibase 5.0+ no longer includes drivers by default. Add drivers explicitly:
FROM liquibase/liquibase:latest
# Add required database drivers
RUN lpm add postgresql --global
RUN lpm add mysql --global
RUN lpm add mssql --global
Or at runtime using environment variables:
docker run -e INSTALL_MYSQL=true liquibase/liquibase:latest update
# Test your changelogs against a test database
docker run --rm \
-v /path/to/changelog:/liquibase/changelog \
-e LIQUIBASE_COMMAND_URL="jdbc:postgresql://test-db:5432/testdb" \
-e LIQUIBASE_COMMAND_USERNAME="username" \
-e LIQUIBASE_COMMAND_PASSWORD="password" \
liquibase/liquibase:5.0 validate
Once testing is successful, update your production deployments to use the new image.
The Liquibase 5.0 Community edition is available under the Functional Source License (FSL). This license:
Read the full license: Functional Source License on fsl.software
Liquibase 4 versions continue to use the Apache 2.0 license.
The Liquibase Secure edition requires a commercial license and provides enterprise-grade database change management with advanced capabilities such as Policy Checks, Flows, drift detection, audit-ready compliance reporting, and supply chain security features (signed images, SBOM, build provenance). For more information and licensing inquiries, visit liquibase.com/get-liquibase.
Published Liquibase Community Docker images are automatically scanned for known vulnerabilities using multiple security scanners. Scans run Monday through Friday at 10 AM UTC and cover the most recent tags of each image (up to 10 per repository by default).
| Scan | Scanner | Coverage |
|---|---|---|
| OS & Application Libraries | Trivy | Operating system packages and top-level Java libraries |
| Nested JAR Dependencies | Trivy | Libraries bundled inside Liquibase JARs |
| SBOM-based Scan | Grype | Full Software Bill of Materials analysis |
Security Dashboard — Liquibase Security provides an interactive interface to explore vulnerability scan results across all image versions:
For a detailed guide on reading vulnerability reports, see SECURITY.md.
FROM liquibase/liquibase:latest
# OR ghcr.io/liquibase/liquibase:latest # GHCR
# OR public.ecr.aws/liquibase/liquibase:latest # Amazon ECR Public
# Docker Hub (default)
docker pull liquibase/liquibase
# GitHub Container Registry
docker pull ghcr.io/liquibase/liquibase
# Amazon ECR Public
docker pull public.ecr.aws/liquibase/liquibase
# Latest
docker pull liquibase/liquibase:latest
docker pull ghcr.io/liquibase/liquibase:latest
docker pull public.ecr.aws/liquibase/liquibase:latest
# Specific version (example: 4.32.0)
docker pull liquibase/liquibase:4.32.0
docker pull ghcr.io/liquibase/liquibase:4.32.0
docker pull public.ecr.aws/liquibase/liquibase:4.32.0
For any questions or support, please visit our Liquibase Community Forum.
Support for Snowflake database has been moved from the external extension liquibase-snowflake into the main Liquibase artifact. This means that Snowflake is now included in the main docker image. If you are using the snowflake extension, remove it from your lib directory or however you are including it in your project. If you are using the Docker image, use the main v4.12+ as there will no longer be a snowflake separate docker image produced. The latest separate Snowflake image will be v4.11. You need to update your reference to either latest to use the main one that includes Snowflake or the version tag you prefer. https://github.com/liquibase/liquibase/pull/2841
Liquibase Docker images use semantic versioning with the following tag strategies:
| Tag Format | Example | Description |
|---|---|---|
latest | liquibase/liquibase:latest | Latest stable release |
latest-alpine | liquibase/liquibase:latest-alpine | Latest stable Alpine variant |
<version> | liquibase/liquibase:5.0.0 | Specific version (exact match) |
<version>-alpine | liquibase/liquibase:5.0.0-alpine | Specific Alpine version |
<major>.<minor> | liquibase/liquibase:5.0 | Latest patch for major.minor |
The following tags are officially supported and can be found on Docker Hub:
liquibase/liquibase:latest - Latest 5.0+ releaseliquibase/liquibase:5.0 - Latest 5.0.x releaseliquibase/liquibase:latest-alpine - Latest Alpine variantliquibase/liquibase:4.x - Liquibase 4 versions (Apache 2.0)All tags are available across all registries (Docker Hub, GHCR, Amazon ECR Public).
5.0) for reproducibility with latest patcheslatest or latest-alpine for convenience-alpine for smaller image size4.x versions (Apache 2.0 license)The liquibase/liquibase:<version> image is the standard choice. Use it as a disposable container or a foundational building block for other images.
For examples of extending the standard image, see the standard image examples.
The liquibase/liquibase:<version>-alpine image is a lightweight version designed for environments with limited resources. It is built on Alpine Linux and has a smaller footprint.
For examples of extending the alpine image, see the alpine image examples.
For a complete example using Docker Compose with PostgreSQL, see the docker-compose example.
Mount your changelog directory to the /liquibase/changelog volume and use relative paths for the --changeLogFile argument.
docker run --rm -v /path/to/changelog:/liquibase/changelog liquibase/liquibase --changeLogFile=changelog.xml update
Starting with this version, Docker containers now behave consistently with CLI usage for file path handling. When you mount your changelog directory to /liquibase/changelog, the container automatically changes its working directory to match, making relative file paths work the same way in both CLI and Docker environments.
Before this enhancement:
liquibase generateChangeLog --changelogFile=mychangelog.xml (creates file in current directory)liquibase generateChangeLog --changelogFile=changelog/mychangelog.xml (had to include path prefix)Now (improved):
liquibase generateChangeLog --changelogFile=mychangelog.xml (creates file in current directory)liquibase generateChangeLog --changelogFile=mychangelog.xml (creates file in mounted changelog directory)Both approaches now work identically, making it easier to switch between local CLI and CI/CD Docker usage without modifying your commands or file paths.
When you mount a directory to /liquibase/changelog, the container automatically:
/liquibase/changelogThis ensures that relative paths in your commands work consistently whether you're using CLI locally or Docker containers in CI/CD pipelines. In most cases, this automatic behavior works seamlessly without any manual intervention.
Liquibase Docker images automatically manage the search path to help locate changelog files and dependencies. The search path is configured with the following priority (highest to lowest):
--search-path CLI argument (highest priority)LIQUIBASE_SEARCH_PATH environment variableWhen you mount a changelog directory to /liquibase/changelog:
--changelogFile=mychangelog.xml): The container automatically sets --search-path=. to search the current directory (working directory).--search-path=/liquibase/changelog to help locate files in the default location.If you need to use a custom search path (for example, to include S3 buckets or remote storage locations), the container respects your configuration and will not override user-provided search paths:
Example 1: Using environment variable with multiple search paths
docker run --rm \
--env LIQUIBASE_SEARCH_PATH="/liquibase/changelog,s3://my-bucket/snapshots/" \
-v /path/to/changelog:/liquibase/changelog \
liquibase/liquibase --changelogFile=mychangelog.xml update
Example 2: Using CLI argument
docker run --rm \
-v /path/to/changelog:/liquibase/changelog \
liquibase/liquibase \
--changelogFile=mychangelog.xml \
--search-path=/custom/path \
update
Example 3: Combining relative paths with custom search paths (Correct approach)
docker run --rm \
--env LIQUIBASE_SEARCH_PATH="/liquibase/changelog,/liquibase/shared-changesets" \
-v /path/to/changelog:/liquibase/changelog \
-v /path/to/shared:/liquibase/shared-changesets \
liquibase/liquibase --changelogFile=main.xml update
In this example:
main.xml is found in the working directory (/liquibase/changelog)LIQUIBASE_SEARCH_PATH (/liquibase/shared-changesets). The current directory (.) is not automatically included. If you want to search both the current directory and a custom path, include both in your configuration: LIQUIBASE_SEARCH_PATH="/liquibase/changelog,/liquibase/shared-changesets"If you're experiencing file-not-found errors with custom search paths:
LIQUIBASE_SEARCH_PATH is properly formatted (comma-separated for multiple paths)When you set LIQUIBASE_SEARCH_PATH to a custom value:
.) is not automatically addedLIQUIBASE_SEARCH_PATH configurationExample: If you want to search both /liquibase/changelog and /liquibase/shared-changesets:
# ✓ CORRECT: Include both paths
--env LIQUIBASE_SEARCH_PATH="/liquibase/changelog,/liquibase/shared-changesets"
# ✗ INCORRECT: Only includes shared-changesets, NOT the current directory
--env LIQUIBASE_SEARCH_PATH="/liquibase/shared-changesets"
To use a default configuration file, mount it in your changelog volume and reference it with the --defaultsFile argument.
docker run --rm -v /path/to/changelog:/liquibase/changelog liquibase/liquibase --defaultsFile=liquibase.properties update
Mount a local directory containing additional jars to /liquibase/lib.
docker run --rm -v /path/to/changelog:/liquibase/changelog -v /path/to/lib:/liquibase/lib liquibase/liquibase update
Due to licensing restrictions, the MySQL driver is not included. Add it either by extending the image or during runtime via an environment variable.
Dockerfile:
FROM liquibase/liquibase:latest
RUN lpm add mysql --global
Build:
docker build . -t liquibase-mysql
docker run -e INSTALL_MYSQL=true liquibase/liquibase update
Here is a complete example using environment variables and a properties file:
docker run --env LIQUIBASE_COMMAND_USERNAME --env LIQUIBASE_COMMAND_PASSWORD --env LIQUIBASE_COMMAND_URL --env LIQUIBASE_COMMAND_CHANGELOG_FILE --rm -v /path/to/changelog:/liquibase/changelog liquibase/liquibase --log-level=info update
liquibase.docker.properties file:
searchPath: /liquibase/changelog
url: jdbc:postgresql://<IP OR HOSTNAME>:5432/<DATABASE>?currentSchema=<SCHEMA NAME>
changeLogFile: changelog.xml
username: <USERNAME>
password: <PASSWORD>
CLI:
docker run --rm -v /path/to/changelog:/liquibase/changelog liquibase/liquibase --defaultsFile=liquibase.docker.properties update
jdbc:sqlserver://<IP OR HOSTNAME>:1433;database=<DATABASE>jdbc:postgresql://<IP OR HOSTNAME>:5432/<DATABASE>?currentSchema=<SCHEMA NAME>jdbc:mysql://<IP OR HOSTNAME>:3306/<DATABASE>jdbc:mariadb://<IP OR HOSTNAME>:3306/<DATABASE>jdbc:db2://<IP OR HOSTNAME>:50000/<DATABASE>jdbc:snowflake://<IP OR HOSTNAME>/?db=<DATABASE>&schema=<SCHEMA NAME>jdbc:jtds:sybase://<IP OR HOSTNAME>:/<DATABASE>jdbc:sqlite:/tmp/<DB FILE NAME>.dbFor more details, visit our Liquibase Documentation.
👁 ImageContent type
Image
Digest
sha256:dfe136c26…
Size
107.2 MB
Last updated
about 1 month ago
Requires Docker Desktop 4.37.1 or later.