Maison >développement back-end >Golang >Comment exécuter des migrations de bases de données Golang-Migrate avec Docker Compose sans « --network host » ?

Comment exécuter des migrations de bases de données Golang-Migrate avec Docker Compose sans « --network host » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-08 20:38:18704parcourir

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

Migrer une base de données à l'aide de Golang-Migrate dans Docker-Compose

Docker-compose a introduit une nouvelle syntaxe qui décourage l'utilisation de l'option "--network", qui soulève des questions sur l'exécution de migrations à l'aide de golang-migrate dans cet environnement. Cet article explique comment configurer golang-migrate avec docker-compose et se connecter à une base de données dans un autre conteneur.

Exécuter des migrations dans un seul dossier

La commande suivante, telle qu'indiquée dans le fichier golang -migrate documentation, peut être utilisé pour exécuter toutes les migrations dans un seul dossier :

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

Pour adapter cette syntaxe à docker-compose, nous pouvons utiliser le approche suivante :

Ajout de la configuration Docker-Compose

Ajoutez la configuration suivante à votre fichier 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:

Cette configuration configure un nouveau réseau appelé "new" et y ajoute les services "db" et "migrate". Le service "db" sert de base de données, tandis que le service "migrate" est utilisé pour exécuter des migrations.

Connexion à une base de données dans un autre conteneur

Au lieu d'utiliser l'hôte "--network ", nous établissons un réseau et nous connectons à la base de données via son alias, "base de données", au sein de ce réseau. Cela permet au service « migrate » d'interagir avec le service « db » comme s'il s'exécutait sur localhost.

La chaîne de connexion utilisée dans la section « command » reflète cette méthode de connexion :

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

Maintenant, l'exécution de docker-compose up devrait exécuter avec succès les migrations et se connecter au conteneur de base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn