Здравствуйте. Я пытаюсь заставить простое приложение API nodeJS работать с данными в базе данных MySQL, используя docker. Но я сталкиваюсь с ошибкой ECONNREFUSED, и я думаю, что это из-за способа, которым я настраиваю свои контейнеры / порты / ips, который мешает моему контейнеру API общаться с моим контейнером MySQL. Ниже я проиллюстрирую свой рабочий процесс:
//start docker network mysql-net
docker network create --driver bridge mysql-net
//Launch a docker container running a MySQL server in detached mode
docker run -d --name mysql-server --network mysql-net -p 3306:3306 -e "MYSQL_ROOT_PASSWORD=rootpassword" -e "MYSQL_DATABASE=bookaplace" -e "MYSQL_USER=bookaplace" -e "MYSQL_PASSWORD=hunter2" mysql:5
На этом этапе я подключаюсь к mysql-серверу через командную строку и вручную создаю таблицу 'lodgings' в базе данных 'bookaplace'. Я добавляю данные в эту таблицу с помощью оператора вставки.
Я нахожусь в папке для моего веб-приложения API, в которую входит мой dockerfile:
FROM node:11
WORKDIR /usr/src/app
COPY . .
RUN npm install
ENV PORT=8000
EXPOSE ${PORT}
CMD [ "npm", "start" ]
Я могу запустить свое приложение локально, используя 'npm start', и оно запускается правильно.
//build image from dockerfile
docker build -t book-a-place-api .
//launch docker book-a-place-api container to port 8000
docker run -d --name book-a-place-api --network mysql-net -p 8000:8000 book-a-place-api
Итак, на данный момент у меня есть и мой контейнер book-a-place-api, и контейнер mysql-server.
Я пытаюсь заставить работать только одну конечную точку, запрос get в / lodgings. Я получаю доступ к этому запросу с помощью http://localhost:8000/lodgings и вижу в журналах book-a-place-api, что не удалось подключиться к базе данных MySQL:
![enter image description here](https://i.stack.imgur.com/efgtd.jpg)
Я думаю, это как-то связано с тем, как я подключаюсь к своему контейнеру mysql-сервера? В моих файлах book-a-place-api я пытаюсь подключиться к базе данных mysql с помощью этого кода:
const mysqlHost = 'mysql-net';
const mysqlPort = 3306;
const mysqlDBName = 'bookaplace';
const mysqlUser = 'root';
const mysqlPassword = 'rootpassword';
const mysqlPool = mysql.createPool({
connectionLimit : 1000,
connectTimeout : 60 * 60 * 1000,
acquireTimeout : 60 * 60 * 1000,
timeout : 60 * 60 * 1000,
host: mysqlHost,
port: mysqlPort,
database: mysqlDBName,
user: mysqlUser,
password: mysqlPassword
});