Estou iniciando dois contêineres docker por meio do docker-compose.
O conteúdo do docker-compose.yml
arquivo:
version: "3.7"
services:
app:
image: my-app:latest
ports:
- 8000:8000
working_dir: /usr/app/MyApp
environment:
MYSQL_ROOT_PASSWORD: myawesomepassword
MYSQL_DATABASE: myawesomedb
MYSQL_USER: root
MYSQL_PASSWORD: myawesomepassword
mysql:
image: mysql:5.6
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: myawesomepassword
MYSQL_DATABASE: myawesomedb
volumes:
db-data: {}
O aplicativo está se conectando ao banco de dados assim:
import mysql from 'mysql2/promise.js';
var config = {
app: {
host: 'http://localhost',
port: '8000'
},
database: {
host: 'host.docker.internal',
port: 3306,
database: process.env['MYSQL_DATABASE'],
user: process.env['MYSQL_USER'],
password: process.env['MYSQL_PASSWORD']
}
}
const {host, port, user, password, database } = config.database;
// Error occurs here
const connection = await mysql.createConnection({ host, port, user, password });
Quando o serviço de aplicativo tenta se conectar ao mysql, recebo este erro:
Error: Access denied for user 'root'@'localhost' (using password: YES)
Qualquer conselho é bem-vindo. Agradeço antecipadamente
Pelo erro, geralmente significa que você está apontando o serviço de aplicativo para
localhost
, o que significaria o próprio contêiner do aplicativo. No seu caso, você estaria apontando para a máquina host. Você precisa atualizar o endereço do banco de dados em sua configuração para apontar para o outro contêiner.Como você está usando
mysql
como o nome do serviço de banco de dados, apenas atualize seu código para:Alterando a configuração do banco de dados de:
para:
Resolvido o problema de conexão.
Obrigado @FirstOne pelo seu tempo e atenção.