Issue
In golang-migrate's documentation, it is stated that you can run this command to run all the migrations in one folder.
docker run -v {{ migration dir }}:/migrations --network host migrate/migrate
-path=/migrations/ -database postgres://localhost:5432/database up 2
How would you do this to fit the syntax of the new docker-compose, which discourages the use of --network
?
And more importantly: How would you connect to a database in another container instead to one running in your localhost?
Solution
Adding this to your docker-compose.yml
will do the trick:
db:
image: postgres
networks:
new:
aliases:
- database
environment:
POSTGRES_DB: mydbname
POSTGRES_USER: mydbuser
POSTGRES_PASSWORD: mydbpwd
ports:
- "5432"
migrate:
image: migrate/migrate
networks:
- new
volumes:
- .:/migrations
command: ["-path", "/migrations", "-database", "postgres://mydbuser:mydbpwd@database:5432/mydbname?sslmode=disable", "up", "3"]
links:
- db
networks:
new:
Instead of using the --network host
option of docker run
you set up a network called new
. All the services inside that network gain access to each other through a defined alias (in the above example, you can access the db service through the database
alias). Then, you can use that alias just like you would use localhost
, that is, in place of an IP address. That explains this connection string:
"postgres://mydbuser:mydbpwd@database:5432/mydbname?sslmode=disable"
Answered By - Federico Answer Checked By - Gilberto Lyons (PHPFixing Admin)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.