Прежде чем пометить этот пост как дублирующую заметку, которую я уже просматривал здесь, на других постах и почти везде, где мог, не нашел решения для моего конкретного случая. Я просто путаюсь между docker-compose.yml
версиями и связываю порты друг с другом.
Вот вопрос:
Я создал два контейнера с Docker, один с сервером NodeJS, а другой с базой данных MySQL.
Мой docker-compose.yml выглядит так:
version: '3'
services:
server:
build: ./server/
ports:
- "8080:8080"
depends_on:
- db
db:
build: ./db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: 1
MYSQL_DATABASE: dashboard_nodejs
MYSQL_USER: root
MYSQL_PASSWORD: password
client:
image: angular_app
build: ./front/
ports:
- "4242:80"
depends_on:
- server
При запуске docker-compose up
все мои приложения создаются и запускаются без проблем, пока сервер не попытается подключиться к MySQL, завершив работу с:
Error: connect ECONNREFUSED 172.20.0.2:3306 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)
dockerfile для моей базы данных содержит только
FROM mysql
COPY init_db.sql /docker-entrypoint-initdb.d/
и init_db.sql в настоящее время
CREATE DATABASE IF NOT EXISTS dashboard_nodejs;
GRANT ALL PRIVILEGES ON dashboard_nodejs.*
TO 'root'@'%' IDENTIFIED BY 'password'
WITH GRANT OPTION;
Наконец, мой сервер пытается установить соединение со следующими параметрами:
var con = mySql.createConnection({
host: "db",
user: "root",
password: "password",
database: "dashboard_nodejs"
});
Понятия не имею, почему MySQL отказывает в соединении даже с (как мне кажется) правильными учетными данными.
Я заранее прошу прощения, если этот конкретный случай уже обсуждался.