docker и mysql: получена ошибка чтения пакетов связи
У меня проблема с подключением в докере. Я использую официальный образ MySQL 5.7 и сервер Prisma. Когда я запускаю его через Prisma Cli, который использует docker compose
(описано здесь), все работает.
Но мне нужно запускать эти контейнеры программно через docker api, и в этом случае соединения из приложения сбрасываются с помощью [Note] Aborted connection 8 to db: 'unconnected' user: 'root' host: '164.20.10.2' (Got an error reading communication packets)
.
Так что я ду
-
Создание мостовой сети:
const network = await docker.network.create({
Name: manifest.name + '_network',
IPAM: {
"Driver": "default",
"Config": [
{
"Subnet": "164.20.0.0/16",
"IPRange": "164.20.10.0/24"
}
]
}});
-
Создание контейнера MySQL и подключение его к сети
const mysql = await docker.container.create({
Image: 'mysql:5.7',
Hostname: manifest.name + '-mysql',
Names: ['/' + manifest.name + '-mysql'],
NetworkingConfig: {
EndpointsConfig: {
[manifest.name + '_network']: {
Aliases: [manifest.name + '-mysql']
}
}
},
Restart: 'always',
Args: [
"mysqld",
"--max-connections=1000",
"--sql-mode=ALLOW_INVALID_DATES,ANSI_QUOTES,ERROR_FOR_DIVISION_BY_ZERO,HIGH_NOT_PRECEDENCE,IGNORE_SPACE,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION,NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_UNSIGNED_SUBTRACTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY,PIPES_AS_CONCAT,REAL_AS_FLOAT,STRICT_ALL_TABLES,STRICT_TRANS_TABLES,ANSI,DB2,MAXDB,MSSQL,MYSQL323,MYSQL40,ORACLE,POSTGRESQL,TRADITIONAL"
],
Env: [
'MYSQL_ROOT_PASSWORD=secret'
]
});
await network.connect({
Container: mysql.id
});
await mysql.start();
- Затем я жду загрузки Mysql, создания необходимых баз данных и необходимых контейнеров
Prisma
из prismagraphql/prisma:1.1
и запускаю их. Сервер приложений правильно разрешает хост mysql, но соединения сбрасываются mysql.
Telnet из контейнера приложения в контейнер mysql в порту 3306 отвечает правильно:
J
5.7.21U;uH Kem']#45T]2mysql_native_password
Что я делаю неправильно?
Ответы
Ответ 1
Можете ли вы попытаться немного подождать, возможно, приложение попытается подключиться к серверу mysql, прежде чем оно будет готово принять соединение. Чтобы проверить это, добавьте некоторое время ожидания при запуске или запустите mysql, а затем приложение в качестве различных развертываний.