首頁 >後端開發 >Golang >如何在沒有「--network host」的情況下使用 Docker Compose 執行 Golang-Migrate 資料庫遷移?

如何在沒有「--network host」的情況下使用 Docker Compose 執行 Golang-Migrate 資料庫遷移?

Patricia Arquette
Patricia Arquette原創
2024-12-08 20:38:18701瀏覽

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