#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?