Docker compose 使用docker compose构建时FluentMySQL迁移失败,但从Xcode构建时不会失败

Docker compose 使用docker compose构建时FluentMySQL迁移失败,但从Xcode构建时不会失败,docker-compose,vapor,fluent-mysql,Docker Compose,Vapor,Fluent Mysql,当我将docker compose与Vapor&FluentMySQL一起使用时,出现以下崩溃 api_1 | [ INFO ] Migrating 'mysql' database (/app/.build/checkouts/fluent/Sources/Fluent/Migration/MigrationConfig.swift:69) api_1 | Fatal error: Error raised at top level: NIO.ChannelError.connec

当我将docker compose与Vapor&FluentMySQL一起使用时,出现以下崩溃

api_1  | [ INFO ] Migrating 'mysql' database (/app/.build/checkouts/fluent/Sources/Fluent/Migration/MigrationConfig.swift:69)
    api_1  | Fatal error: Error raised at top level: NIO.ChannelError.connectFailed(NIO.NIOConnectionError(host: "db", port: 3309, dnsAError: nil, dnsAAAAError: nil, connectionErrors: [NIO.SingleConnectionFailure(target: [IPv4]db/172.27.0.2:3309, error: connection reset (error set): Connection refused (errno: 111))])): file /home/buildnode/jenkins/workspace/oss-swift-5.1-package-linux-ubuntu-18_04/swift/stdlib/public/core/ErrorType.swift, line 200
使用以下命令时迁移失败:

migrations.add(model:model.self,数据库:.mysql)

如果我删除了它,因此没有模型被迁移,那么应用程序构建就不会出现错误,并且我可以随时访问它

我的docker-compose.yml如下所示:

version: "3.7"
services:
  api:
    image: vaporapiimage
    ports:
      - 80:8080
    environment:
      MYSQL_HOST: db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: dbname
      SLEEP_LENGTH: 7
      MYSQL_PORT: 3309
    depends_on:
        - db
  db:
    image: mysql:8.0.1
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: dbname
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3309:3306"
它按照预期从Xcode本地构建和运行(如在没有Docker的情况下)

如果
api
服务被注释掉,则
db
服务将自行运行,并在第一次运行时创建数据库

任何帮助都将不胜感激

更新: 用Adminer替换
api
,可以通过浏览器中的Adminer访问
db
。因此,
db
服务是可访问的,似乎问题在于Vapor/Fluent(或者更确切地说是我对它们的使用):


问题是,我已经将
db
的端口映射到3309,这样它就不会与主机MYSQL冲突,但也将ENV“MYSQL_port”设置为3309,而这本应保留为默认3306,因为这是用于容器之间的通信

  admin:
    image: adminer
    ports:
      - 8080:8080