Прежде всего, здесь есть пара проблем.
Во-первых, вам нужно взглянуть на объединение ваших контейнеров Docker в файле docker-compose вместе. По сути, каждый контейнер не знает другого, пока вы не укажете, в какой сети он находится. Каждый контейнер может быть в нескольких, но если вы хотите, чтобы два контейнера подключались, они должны быть в одной сети. https://docs.docker.com/compose/networking/#configure-the-default-network
Тогда, во-вторых, вы не можете использовать localhost в качестве URL. По сути, Docker-контейнер является изолированной средой, поэтому у него есть собственный "localhost", поэтому при использовании этого адреса он фактически пытается подключиться к mysql в контейнере nodejs. Таким образом, при правильном подключении к сети вы сможете подключиться к контейнеру mysql, используя их имена, которые вы дали им в docker-compose, что-то вроде topsectiondb:3306
или что-то вроде этого. Это говорит Docker о том, что вы используете сеть для подключения одного Docker-контейнера к другому, и позволит вам установить первоначальное соединение. Подключение к другому контейнеру с помощью Docker compose
=============================================== ====
Фактический ответ:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db'
});
По сути, для библиотеки mysql требуется имя хоста, которое в большинстве случаев является localhost, но в качестве связывающих контейнеров с помощью docker-compose вы используете псевдоним контейнера. Номер порта по умолчанию 3306
Итак:
host: "topsectiondb"
хватит!