docker Flyway未连接到postgresql

dgjrabp2  于 2023-03-17  发布在  Docker
关注(0)|答案(1)|浏览(120)

我有一段时间有一个问题,我还没有找出为什么会发生。
我试图建立一个“instagram克隆”来研究Golang,但我不知道为什么我的flyway不能连接到我的postgresql。
下面是我的 Docker 组成:

version: "3.8"

services:
  server:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/usr/src/app
  db:
    image: postgres:14.5
    environment:
      POSTGRES_DB: instagram
      POSTGRES_USER: instagram
      POSTGRES_PASSWORD: instagram
    ports:
      - "5432:5432"
  flyway:
    image: flyway/flyway:9.9.0
    entrypoint:
      - sh
      - -c
      - flyway -defaultSchema=public -baselineOnMigrate=true -url=jdbc:postgresql://localhost:5432/instagram -user=instagram -password=instagram migrate
    depends_on:
      - db
    volumes:
      - ./data/sql:/flyway/sql

数据库似乎是正确创建的,我可以通过DBeaver访问它,但是,我的flyway无法连接到它。

我在一个WSL2上运行它,我已经清除了我的docker,删除了每一个容器,卷和映像一次或两次。我运行它与docker compose up db其次是docker compose up flyway。有人有什么想法吗?
编辑:这是我的docker组成文件后的决议,任何人都可能需要它

version: "3.8"

services:
  server:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/usr/src/app
  db:
    image: postgres:14.5
    env_file:
      - ".env"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U instagram"]
      interval: 10s
      retries: 5
    ports:
      - "5432:5432"
  flyway:
    image: flyway/flyway:9.9.0
    entrypoint:
      - sh
      - -c
      - flyway -defaultSchema=public -baselineOnMigrate=true -connectRetries=60 -url=jdbc:postgresql://db:5432/instagram -user=instagram -password=instagram migrate
    depends_on:
      - db
    volumes:
      - ./data/sql:/flyway/sql
fnx2tebb

fnx2tebb1#

有时DB容器需要几秒钟才能启动。在命令中使用-connectRetries=60标志,以便在x秒内每秒自动重试。检查GitHub Flyway docker
使用运行状况检查:

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U instagram -d instagram -h db"]
  interval: 5s
  timeout: 5s
  retries: 10

此外,您可以尝试在命令中的无限循环中等待:

flyway:
  image: flyway/flyway:9.9.0
  command: ["sh", "-c", "while ! nc -z db 5432; do sleep 1; done; flyway -defaultSchema=public -baselineOnMigrate=true -url=jdbc:postgresql://db:5432/instagram -user=instagram -password=instagram migrate"]
  depends_on:
    - db
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U instagram -d instagram -h db"]
    interval: 5s
    timeout: 5s
    retries: 10
  volumes:
    - ./data/sql:/flyway/sql

相关问题