You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker Compose+Flyway迁移数据库时遇连接拒绝问题

Docker Compose部署Flyway连接SQL Server失败问题排查与解决

问题现象

Flyway容器持续抛出连接错误:

2024-11-22 14:54:57 WARNING: Connection error: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall."

数据库容器运行正常,但SQL Server日志中无任何连接请求记录。

用户配置

docker-compose.yml

services:
  database:
    build:
      no_cache: true
      context: ./database/mssql
      args:
        DB_PASSWORD: ${DB_PASSWORD}
        ACCEPT_EULA: Y
    environment:
      - DB_PASSWORD=${DB_PASSWORD}
    container_name: database
    ports:
        - 1433:1433
    volumes:
      - dbdata:/var/opt/mssql
  flyway:
    image: redgate/flyway
    container_name: flyway
    command: migrate -user=${DB_USER} -password=${DB_PASSWORD} -connectRetries=60
    volumes:
      - ./database/flyway/conf/:/flyway/conf
      - ./database/flyway/sql/:/flyway/sql
    depends_on:
      - database      
volumes:
  dbdata:

flyway.conf

flyway.url=jdbc:sqlserver://localhost:1433;databaseName=${DB_NAME};TrustServerCertificate=True;
flyway.defaultSchema=${DB_SCHEMA}

核心问题与解决方案

1. 修正Flyway数据库连接地址

在Docker Compose默认网络中,每个容器的localhost指向自身容器,而非数据库容器。Flyway需要通过数据库服务名(即docker-compose.yml中定义的database)访问数据库。

修改flyway.conf中的连接地址:

flyway.url=jdbc:sqlserver://database:1433;databaseName=${DB_NAME};TrustServerCertificate=True;
flyway.defaultSchema=${DB_SCHEMA}

2. 可选:添加健康检查确保数据库就绪

虽然depends_on能保证Flyway在数据库容器启动后运行,但SQL Server启动后需要时间完成初始化。添加健康检查可确保Flyway仅在数据库服务完全就绪后执行迁移:

修改database服务配置,添加健康检查:

database:
  # 保留原有配置
  healthcheck:
    test: ["CMD-SHELL", "/opt/mssql-tools/bin/sqlcmd -S localhost -U ${DB_USER} -P ${DB_PASSWORD} -Q 'SELECT 1' || exit 1"]
    interval: 10s
    retries: 10
    start_period: 10s

修改flyway服务的depends_on配置:

flyway:
  # 保留原有配置
  depends_on:
    database:
      condition: service_healthy

3. 环境变量校验

确保${DB_NAME}、${DB_SCHEMA}、${DB_USER}等环境变量已正确设置,且Flyway容器能读取到这些变量值。

内容的提问来源于stack exchange,提问作者Marqueone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:57:02