首页 > 解决方案 > Error binding mariadb nodejs docker-compose

问题描述

I am using docker-compose to create a MariaDB/NodeJS:

version: '3'
services: 
    app:
        image: node:alpine
        volumes:
          - ./:/app
        working_dir: /app
        environment:
          NODE_ENV: development
        ports:
          - 3001:3001
        command: npm run dev
    mysql_database:
        image: mariadb:latest
        restart: always
        ports:
          - "3306:3306"
        expose:
          - 3306
        volumes:
          - ./dbdata:/var/lib/mysql:rw
          - ./database.sql:/docker-entrypoint-initdb.d/database.sql
        environment:
          MYSQL_ROOT_PASSWORD: 1234

The node.js app and mysql server work properly (I can connect to they independely: nodejs--> localhost:3001 and MySQL WorkBrench pointing to localhost:3306), but the connection between the 2 sevices are not working. Show error: connect ECONNREFUSED 127.0.0.1:3306 NodeJS applicacion require('mysql'):

var connection = mysql.createConnection({

connectionLimit: 10,
host: 'localhost',
user: 'root',
password: '1234',
database: 'biologia',
port: '3306',

All this work fine without using docker-compose or deploying mysql docker and run in local (without docker) nodejs poiting to mysql docker.

标签: mysqlnode.jsdockerdocker-composemariadb

解决方案


容器不知道是什么localhost。或者更好地说 localhost 始终是容器本身,而不是您的主机 PC。

使用容器名称来访问它docker-compose

在您的情况下,数据库容器名为mysql_database.

改变:

host: 'localhost'

host: 'mysql_database',

当尝试从另一个 ( app) 容器访问时。


推荐阅读