Попытка подключиться к базе данных из микросервиса, не удалось подключиться к базе данных
Ошибка: подключить ECONNREFUSED 172.18.0.2:3306
сервис / index.js
var http = require('http');
//create a server object:
http.createServer(function (req, res) {
res.write('Hello World!'); //write a response to the client
res.end(); //end the response
}).listen(8080); //the server object listens on port 8080
console.log("Listening at 8080");
var mysql = require('mysql');
var con = mysql.createConnection({
host: "database",
user: "root",
password: "password"
});
con.connect(function(err) {
if (err) throw err;
console.log("Database Connected!");
});
докер-compose.yml
version: '3'
services:
database:
build:
./database
ports:
- "6603:3306"
image: "test-mysql"
container_name: "test-mysql"
service:
build:
./service
ports:
- "8080:8080"
depends_on:
- database
image: "test-nodejs"
container_name: "test-nodejs"
restart: on-failure
Я пытался подключиться к базе данных с другими настройками.
1) Без порта
var con = mysql.createConnection({
host: "database",
user: "root",
password: "password"
});
2) указанный порт 3306
var con = mysql.createConnection({
host: "database",
user: "root",
password: "password"
port: 3306
});
3) указанный порт 6603
var con = mysql.createConnection({
host: "database",
user: "root",
password: "password",
port: 6603
});
база данных / Dockerfile
FROM mysql
ENV MYSQL_DATABASE=test
ENV MYSQL_ROOT_PASSWORD=password
EXPOSE 6603:3306
COPY ./schema.sql /docker-entrypoint-initdb.d/
Как мой микросервис node.js может обнаружить службу базы данных?
Редактировать
Я подозревал, что к моменту запуска nodejs база данных не была готова, поэтому я добавил некоторую задержку перед подключением к базе данных, и ошибка изменилась
Обновленный код
setTimeout(function(){
var mysql = require('mysql');
var con = mysql.createConnection({
host: "database",
user: "root",
password: "password"
});
con.connect(function(err) {
if (err) throw err;
console.log("Database Connected!");
});
}, 20 * 1000);
выход
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client