TCPConnectWrap.afterConnect - узел не может получить данные из mysql, когда они находятся в докере. - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь соединить узел с MySQL через dokcer-compose. Я могу получить доступ к MySQL через верстак, но когда я пытаюсь подключиться к узлу, я получаю сообщение об ошибке:

Error: connect ECONNREFUSED 127.0.0.1:3306
     at TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1054: 14))

Кто-нибудь знает, что происходит?

докер-compose.yml

version: '3'

services:

  #App Service
  app:
    image: "node:alpine"
    container_name: cms-node
    restart: unless-stopped
    tty: true
    working_dir: /app
    environment:
      - NODE_ENV=production
    ports:
      - 1234:1234
    volumes:
      - ./:/app
    links:
      - db
    depends_on:
      - db

  #Mysql Service
  db:
    image: mysql:latest
    container_name: cms-mysql
    restart: unless-stopped
    # command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_DATABASE: CMS
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3306:3306

узел создания соединения

const db: Connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'CMS',
});

export default db;

узел пытается подключиться

db.connect((err) => {
            if (err) {
                throw err;
            }
            console.log('Connected!');
        });

1 Ответ

0 голосов
/ 27 мая 2019

Вы должны использовать имя ссылки (по умолчанию, имя связанной службы) в качестве имени хоста для подключения.Подробнее см. Документацию docker-compose.yml .

Поэтому просто используйте host: 'db' вместо host: 'localhost'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...