Свободная миграция MySQL не выполняется при сборке с docker -композицией, но не при сборке из Xcode - PullRequest
1 голос
/ 25 февраля 2020

При использовании docker -compose с Vapor & Fluent * я получаю следующий cra sh. * 10032 *.

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, database: .mysql)

Если я уберу это, чтобы никакие модели не были перенесены, приложение создаст без ошибок, и я смогу получить к нему доступ в http://localhost/.

My 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 служба будет работать сама по себе и создавать базу данных при первом запуске.

Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ: замена api на Adminer дает возможность получить доступ к db через Adminer в браузере. Таким образом, сервис db доступен, и кажется, что проблема в Vapor / Fluent (точнее, в моем использовании):

  admin:
    image: adminer
    ports:
      - 8080:8080

1 Ответ

1 голос
/ 07 марта 2020

Проблема заключалась в том, что я сопоставил порт для db с 3309, чтобы он не конфликтовал с хостом MYSQL, но также установил ENV 'MYSQL_PORT' на 3309, когда его следовало сохранить как по умолчанию 3306, потому что это было для связи между контейнерами.

...