首页 >后端开发 >Golang >如何使用 Docker Compose 和单独的数据库容器运行 Golang-Migrate?

如何使用 Docker Compose 和单独的数据库容器运行 Golang-Migrate?

Linda Hamilton
Linda Hamilton原创
2024-12-06 13:06:14574浏览

How to Run Golang-Migrate with Docker Compose and a Separate Database Container?

使用 Docker Compose 运行 Golang-Migrate

Golang-migrate 的文档提供了用于在给定目录中执行所有迁移的命令:

docker run -v {{ migration dir }}:/migrations --network host migrate/migrate -path=/migrations/ -database postgres://localhost:5432/database up 2

但是,该命令与 docker-compose 的语法不兼容。本文将演示如何修改命令以适应新语法并连接到在另一个容器中运行的数据库。

Docker-Compose 集成

要将 golang-migrate 与 docker-compose 集成,将以下内容添加到您的 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:

此配置创建一个名为“new”的网络,并包含“db”和“迁移”服务。 “db”服务使用 PostgreSQL 数据库所需的环境变量进行定义。

连接到另一个容器中的数据库

要连接到另一个容器中运行的数据库,请修改连接字符串在“迁移”服务的“命令”属性中:

postgres://mydbuser:mydbpwd@database:5432/mydbname?sslmode=disable

就此而言string:

  • mydbuser 是 PostgreSQL 数据库的用户名
  • mydbpwd 是 PostgreSQL 数据库的密码
  • database 是“db”服务中定义的别名
  • 5432 是 PostgreSQL 的端口号数据库
  • mydbname 是 PostgreSQL 数据库的名称

通过使用别名“database”,您可以连接到“db”服务,就像它在本地主机上运行一样。

通过这些修改,您可以使用 docker-compose 成功运行 golang-migrate 并连接到另一个容器中的数据库。

以上是如何使用 Docker Compose 和单独的数据库容器运行 Golang-Migrate?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn