首页 >后端开发 >Golang >如何在没有'--network host”的情况下使用 Docker Compose 运行 Golang-Migrate 数据库迁移?

如何在没有'--network host”的情况下使用 Docker Compose 运行 Golang-Migrate 数据库迁移?

Patricia Arquette
Patricia Arquette原创
2024-12-08 20:38:18704浏览

How to Run Golang-Migrate Database Migrations with Docker Compose Without `--network host`?

在 Docker-Compose 中使用 Golang-Migrate 迁移数据库

Docker-compose 引入了一种新语法,不鼓励使用“--network”选项,该选项会阻止使用“--network”选项。提出了有关在此环境中使用 golang-migrate 运行迁移的问题。本文探讨如何使用 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 配置

将以下配置添加到您的 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”和“migrate”服务。 “db”服务用作数据库,而“migrate”服务用于运行迁移。

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

而不是使用“--network host ”选项,我们建立一个网络并通过该网络内的别名“数据库”连接到数据库。这使得“migrate”服务能够与“db”服务交互,就像它在本地主机上运行一样。

“命令”部分中使用的连接字符串反映了此连接方法:

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

现在,运行 docker-compose up 应该成功执行迁移并连接到数据库容器。

以上是如何在没有'--network host”的情况下使用 Docker Compose 运行 Golang-Migrate 数据库迁移?的详细内容。更多信息请关注PHP中文网其他相关文章!

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