在AWS Elastic Beanstalk上使用MySQL为NodeJs编写Docker compose

在AWS Elastic Beanstalk上使用MySQL为NodeJs编写Docker compose,mysql,node.js,docker-compose,amazon-elastic-beanstalk,Mysql,Node.js,Docker Compose,Amazon Elastic Beanstalk,我有一个Nodejs应用程序,托管在AWS EB单容器Docker上。现在我通过上传zip文件从AWS控制台部署它。一切正常。 我希望能够使用CLI将更改推送到AWS。到目前为止,在尝试MySQL连接之前,部署是有效的。此时,它将失败并出现错误: {“errno”:“econnreference”,“code”:“econnreference”,“syscall”:“connect”,“address”:“127.0.0.1”,“port”:3306,“fatal”:true} 我很确定原因是我

我有一个Nodejs应用程序,托管在AWS EB单容器Docker上。现在我通过上传zip文件从AWS控制台部署它。一切正常。 我希望能够使用CLI将更改推送到AWS。到目前为止,在尝试MySQL连接之前,部署是有效的。此时,它将失败并出现错误:

{“errno”:“econnreference”,“code”:“econnreference”,“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,我非常感谢您的指导。我在网上浏览了一些教程,但仍然有点困惑,而且其中一些已经有好几年了,我想使用当前的最佳实践


提前感谢。

尝试使用以下docker-compose.yml文件运行
docker compose up

version: "3.3"

services:
    example_service:
        build: .
说明:

example\u service
是您正在启动的服务的名称。这个名字可以是你想要的任何东西,只是不包括特殊字符之类的东西


build:。
表示docker文件与docker-compose.yml文件位于同一目录中。

获取错误:错误:在文件中。\.env:environment变量名称“AWS\u S3\u ACCESS\u KEY\u ID”可能不包含空格。在.env文件中该行是否有空格?@goryef表示上下文,docker似乎正在从格式不正确的文件中提取环境变量。如果是这种情况,那么您应该有一个名为“.env”的文件(可能是隐藏的),该文件中应该有一行类似于
AWS\u S3\u ACCESS\u KEY\u ID=YOUR\u ACCESS\u KEY
。确保那行没有空格,就是这样。它正在运行。我需要在docker compose.yml中的任何位置指定mysql连接吗?我不这样认为,除非您希望通过docker compose启动mysql实例。