goose migrations in docker
100K+
Docker configuration for the pressly/gooseā migration tool.
Based on ideas of the gomicro/docker-goose repository.
Features:
up;The base registry for this image is on GitHub. The Docker Hub version may be outdated.
Visit the ghcr.io/kukymbr/goose-dockerā for the actual version.
Looking for a pure goose wrapper with no sugar around?
š Check out the command wrapper modeā document.
The pure command wrapper uses a goose command as a docker's entrypoint
instead of the entrypoint.shā script:
ENTRYPOINT ["/bin/goose"]
This allows you to get a full control what are you passing to the goose command, for example:
docker run --rm -v ./migrations:/migrations \
-e GOOSE_MIGRATION_DIR="/migrations" \
-e GOOSE_DRIVER="postgres" \
kukymbr/goose-docker-cmd:v3.27.2 \
create my_new_feature sql
or:
docker run --rm -v ./migrations:/migrations \
kukymbr/goose-docker-cmd:v3.27.2 \
-dir="/migrations" postgres "user=postgres dbname=postgres sslmode=disable" up-to 20230607203836
The image supports the following environment variables:
| Variable | Required | Description | Default value |
|---|---|---|---|
GOOSE_DRIVER | ā | this should specify the database driver (e.g., postgres) | none |
GOOSE_DBSTRING | ā | specify the database connection parameters in this variable (e.g., host=localhost port=5432 user=postgres password=postgres dbname=postgres) | none |
GOOSE_COMMAND | the goose command to execute | up | |
GOOSE_COMMAND_ARG | argument for the goose command, for example, the VERSION argument for the up-to/down-to commands | none | |
GOOSE_EXTRA_ARGS | additional goose arguments, for example GOOSE_EXTRA_ARGS="-table=_db_version -allow-missing" | none | |
GOOSE_VERBOSE | if set to true, goose will be executed with the -v flag | false |
See the goose usageā for available drivers, format of the connection string and available commands.
To pass environment variables to the goose via the .env file
(available in goose since v3.24.0,
see the goose docā for info),
mount .env file to the /goose-docker directory, for example:
docker run --rm -v ./migrations:/migrations -v my_goose.env:/goose-docker/.env --network host \
-e GOOSE_DRIVER="postgres" \
-e GOOSE_DBSTRING="host=localhost port=5432 user=postgres password=postgres dbname=postgres" \
ghcr.io/kukymbr/goose-docker:3.27.2
The image expects the /migrations directory to be mounted to the container,
and it should contain your migration files.
For example, pure docker call:
docker run --rm -v ./migrations:/migrations --network host \
-e GOOSE_DRIVER="postgres" \
-e GOOSE_DBSTRING="host=localhost port=5432 user=postgres password=postgres dbname=postgres" \
kukymbr/goose-docker:3.27.2
Example with up-to command:
docker run --rm -v ./migrations:/migrations --network host \
-e GOOSE_COMMAND="up-to" \
-e GOOSE_COMMAND_ARG="20230607203836" \
-e GOOSE_DRIVER="postgres" \
-e GOOSE_DBSTRING="host=localhost port=5432 user=postgres password=postgres dbname=postgres" \
kukymbr/goose-docker:3.27.2
Example with create command (works since v3.20.0):
docker run --rm -v ./migrations:/migrations \
-e GOOSE_COMMAND="create" \
-e GOOSE_COMMAND_ARG="my_new_migration_name sql" \
kukymbr/goose-docker:v3.27.2
Docker compose example:
services:
# ... Add your DB service
migrations:
image: kukymbr/goose-docker:3.27.2
environment:
- GOOSE_DRIVER=postgres
- GOOSE_DBSTRING=host=postgres port=5432 user=postgres password=postgres dbname=postgres
volumes:
- ./migrations:/migrations
See the compose.ymlā file for the full example.
If you need to dynamically override the environment values provided in the docker compose or in the .env files,
add these variables into the environment section with a placeholder as a value, for example:
migrations:
# ...
environment:
- GOOSE_COMMAND=${GOOSE_COMMAND}
- GOOSE_COMMAND_ARG=${GOOSE_COMMAND_ARG}
When you can override the values:
GOOSE_COMMAND="create" GOOSE_COMMAND_ARG="test_migration sql" docker compose run --rm migrations
If you don't want or don't have an option to add migrations files as a volume,
create a Dockerfile extending the goose-docker image and add your files into it:
FROM kukymbr/goose-docker:3.27.2
ADD /path/to/migrations /migrations
Then build it and use it instead of the goose-docker image as usual.
The ARM64 architecture support is added since the v3.23.0.
latest tag noticeThe latest tag of this image points to the latest commit to the main branch
and not supposed to be used in the production. Always specify a semver tag for production use.
Please, refer the CONTRIBUTING.mdā for contribution info.
Content type
Image
Digest
sha256:f0c9e0530ā¦
Size
16.9 MB
Last updated
14 days ago
docker pull kukymbr/goose-docker:3.27.2