Docker сочинение для NodeJs с MySQL на AWS Elasti c Beanstalk - PullRequest
0 голосов
/ 14 января 2020

У меня есть приложение Nodejs, которое размещено в AWS EB Один контейнер Docker. Сейчас я развертываю его с консоли AWS, загружая zip-файл. Все работает как положено. Я хотел бы иметь возможность изменить sh на AWS с помощью CLI. Пока развертывание работает до попытки MySQL подключения. В этот момент происходит сбой с ошибкой:

{"errno": "ECONNREFUSED", "code": "ECONNREFUSED", "syscall": "connect", "address": "127.0.0.1 "," port ": 3306," fatal ": true}

Я уверен, что причина в том, что у меня нет файла docker -compose.yml. Мой Dockerfile:

FROM node:10.16.3 

RUN mkdir /opt/app
WORKDIR /opt/app
COPY package.json package-lock.json ./

RUN npm cache clean --force && npm install

COPY . /opt/app

ENV PORT 80
EXPOSE 80

CMD [ "npm", "start" ]

И. js для подключения к MySQL:

var mysql= require('promise-mysql');
var util = require('util')
require('dotenv').config();

var pool = mysql.createPool({
   connectionLimit : process.env.DB_CONLIMIT,
   host            : process.env.DB_HOST,
   user            : process.env.DB_USER ,
   password        : process.env.DB_PASSWORD ,
   database        : process.env.DB_DATABASE,
})
pool.getConnection((err, connection) => {
   if (err) {
       if (err.code === 'PROTOCOL_CONNECTION_LOST') {
           console.error('Database connection was closed.')
       }
       if (err.code === 'ER_CON_COUNT_ERROR') {
           console.error('Database has too many connections.')
       }
       if (err.code === 'ECONNREFUSED') {
           console.error('Database connection was refused.')
       }
    }else{
       console.log('MySQL Connected!')  
   }
   if (connection) connection.release()
   return
})
pool.query = util.promisify(pool.query)
module.exports = pool

Я ценю любые рекомендации о том, как правильно построить docker -compose.yml. Я просмотрел несколько онлайн-уроков, но все еще немного запутался, к тому же некоторым из них уже несколько лет, и я хотел бы использовать текущие лучшие практики.

Заранее спасибо.

1 Ответ

0 голосов
/ 14 января 2020

Попробуйте запустить docker-compose up со следующим docker -compose.yml файлом:

version: "3.3"

services:
    example_service:
        build: .

Объяснение:

example_service - имя запускаемой вами службы. Это имя может быть любым, что угодно, только не включайте такие вещи, как специальные символы.

build: . означает, что файл Docker находится в том же каталоге, что и файл docker -compose.yml.

...