запуск mysql и nodejs с помощью docker-создает результаты в ERR_CONNECTION_RESET

#mysql #node.js #docker #docker-compose

#mysql #node.js #docker #docker-compose

Вопрос:

Я пытаюсь запустить mysql и nodejs с помощью docker-compose. Я запускаю nodejs на порту 3006 и хочу, чтобы mysql использовал уже созданную базу данных, которая называется «locations». Когда я выполняю docker-compose, я не получаю никаких ошибок, но на консоли я получаю этот вывод, и он «застревает» здесь.

 2020-12-04T23:19:20.685756Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.22'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
 

Если я сейчас попытаюсь запустить visit localhost:3006, я получаю сообщение о том, что сайт недоступен и что соединение было сброшено.

Это мой файл docker-compose.

 version: "3.2"
services:
  nodejs:
    build: ./
    image: nodejs
    container_name: nodejs_2
    restart: unless-stopped
    ports:
      - "3006:3006"
    depends_on:
      - mysql
  mysql:
    image: mysql:latest
    ports:
      - 3306
    environment:
      - MYSQL_ROOT_PASSWORD=boom
      - MYSQL_DATABASE=locations
      - MYSQL_HOST=0.0.0.0
      - MYSQL_PORT=3306
    volumes:
      - /home/stan/Documents/project:/var/lib/mysql
 

app.js:

 // Require packages and set the port
const express = require('express');
const port = 3006;
const bodyParser = require('body-parser');
const locations_t = require('/home/stan/Documents/project/locations.js');
const app = express();

// Use Node.js body parsing middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true,
}));

locations_t(app);


// Start the server
const server = app.listen(port, (error) => {
if (error) return console.log(`Error: ${error}`);
console.log(`Server listening on port ${port}`);
});
 

Dockerfile:

 FROM node:6.10

RUN mkdir /app

WORKDIR /app

COPY package.json /app/package.json
RUN npm install
RUN npm i -g db-migrate

EXPOSE 3006

CMD tail -f /dev/null
 

config.js:

 const mysql = require('mysql');
const config = {
    host: 'mysql',
    user: 'root',
    password: 'password',
    database: 'locations',
};

// Create a MySQL pool
const pool = mysql.createPool(config);
var connection = mysql.createConnection({multipleStatements: true});
// Export the pool
module.exports = pool;
 

locations.js:

 // Load the MySQL pool connection
const pool = require('/home/stan/Documents/projects/config.js');

const router = app => {
    // Display welcome message on the root
    app.get('/', (request, response) => {
        response.send({
            message: 'Welcome!!'
        });
});
 

Если я начну app.js без docker-compose все работает нормально, но запустить его с помощью docker localhost невозможно.
Может ли кто-нибудь мне помочь?
Я застрял на проблеме в течение нескольких дней.

Комментарии:

1. CMD В вашем изображении приложение фактически не запускается; попробуйте изменить его на что-то вроде CMD npm run start . Вам также необходимо убедиться COPY , что код приложения включен в изображение, а не только в package.json файл.

2. Итак, мне нужно скопировать config.json, locations.json и app.json в dockerfile?