Ошибка привязки mariadb nodejs docker -compose - PullRequest
0 голосов
/ 24 марта 2020

Я использую docker -композицию для создания 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

Приложение node.js и сервер mysql работают правильно (я могу подключиться к ним независимо: nodejs -> localhost: 3001 и MySQL WorkBrench, указывающий на localhost: 3306), , но соединение между двумя серверами не работает . Показать ошибку: connect ECONNREFUSED 127.0.0.1:3306 NodeJS applicationacion require ('mysql'):

var connection = mysql.createConnection({

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

Все это прекрасно работает без использования docker -составления или развертывания mysql docker и запускать по локальной сети (без docker) nodejs, указывая на mysql docker.

1 Ответ

0 голосов
/ 24 марта 2020

Контейнеры понятия не имеют, что такое localhost. Или лучше сказать, что localhost - это всегда сам контейнер, а не ваш хост P C.

Используйте имя контейнера для доступа к нему с помощью docker-compose.

В вашем случае контейнер БД с именем mysql_database .

Изменение:

host: 'localhost'

на

host: 'mysql_database',

при попытке доступа с другого (app) контейнер.

...