在golang-migrate的文档中,声明可以运行此命令来在一个文件夹中运行所有迁移。
docker run -v {{ migration dir }}:/migrations --network host migrate/migrate
-path=/migrations/ -database postgres://localhost:5432/database up 2
你会如何做到这一点,以适应新的docker-compose的语法,这会阻碍使用--network
?
更重要的是:如何连接到另一个容器中的数据库而不是连接到localhost中的数据库?
将它添加到你的docker-compose.yml
就可以了:
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:
而不是使用--network host
的docker run
选项,你建立了一个名为new
的网络。该网络内的所有服务都通过定义的别名相互访问(在上面的示例中,您可以通过database
别名访问数据库服务)。然后,您可以像使用localhost
一样使用该别名,即代替IP地址。这解释了这个连接字符串:
"postgres://mydbuser:mydbpwd@database:5432/mydbname?sslmode=disable"