Сбой миграции FluentMySQL при сборке с помощью docker-compose, но не при сборке из Xcode
Я получаю следующий сбой при использовании 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, database: .mysql)
Если я удалю это, и никакие модели не будут перенесены, приложение будет построено без ошибок, и я смогу получить к нему доступ по адресу http://localhost/.
Мой 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
через Админера в браузере. Так чтоdb
сервис доступен, и кажется, что проблема в Vapor/Fluent (или, скорее, в моем их использовании):
admin:
image: adminer
ports:
- 8080:8080
1 ответ
Проблема заключалась в том, что я сопоставил порт для db
на 3309, чтобы он не конфликтовал с хостом MYSQL, но также установил ENV 'MYSQL_PORT' на 3309, тогда как это должно было быть сохранено как 3306 по умолчанию, потому что это было для связи между контейнерами.