To run database migrations using golang-migrate in a pipeline for a Go application, we need the binary migrate command available in the container.
Installing the database migration utility golang-migrate for Go inside a Linux container can be accomplished with the following.
Add this to the Dockerfile (note: the full path):
RUN go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest RUN ln -s /go/bin/linux_amd64/migrate /usr/local/bin/migrate
After running docker build and run, SSH into the container to see if everything is correct.
Use docker ps to get the container ID. The following commands accomplish this:
$ docker build -t my-tag . $ docker run -d -p 5000:5000 my-tag $ docker ps CONTAINER ID IMAGE ... 8e402138e4b2 my-tag ... $ docker exec -it 8e402138e4b2 /bin/sh
Now we should have a shell inside the container.
Check if the migrate command installed correctly:
/# which migrate
This should show a path to the command, e.g.:
/go/bin/migrate
Check the version of the command:
/# migrate -version
This should show, e.g.:
dev
The container should now be able to run Go database migrations, preferably by running a startup script when the container starts.