我在docker中遇到了连接问题。我使用官方的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容器并将其附加到网络
- 然后我等待Mysql启动,创建所需的数据库和所需的
Prisma
容器,这些容器来自prismagraphql/prisma:1.1
,并启动它们。应用程序服务器正确解析mysql主机,但是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容器的3306端口进行telnet响应正确:
J
5.7.21U;uH Kem']#45T]2mysql_native_password
我做错了什么?
max_allowed_packet
吗? - Mostafa Hussein