NodeJS + Mysql与Docker组合2

我正在尝试构build一个docker-compose文件来在本地部署连接到mysql服务器的NodeJS应用程序。 我已经尝试了一切(阅读了很多教程和一些问题在这里在Stackoverflow),但我不断收到ECONNREFUSED错误。 这是来自NodeJS的Dockerfile:

##Nodejs FROM node:latest RUN useradd --user-group --create-home --shell /bin/false app ENV HOME=/home/app COPY package.json npm-shrinkwrap.json $HOME/playerground/ RUN chown -R app:app $HOME/* USER app WORKDIR $HOME/playerground RUN npm cache clean && npm install --silent --progress=false USER root COPY . $HOME/playerground RUN chown -R app:app $HOME/* USER app 

这是我的Mysql Dockerfile:

 FROM mysql:latest ENV MYSQL_ROOT_PASSWORD root ENV MYSQL_DATABASE playerground ENV MYSQL_USER root ENV MYSQL_PASSWORD root 

这是我的docker组成:

 version: '2' services: db: build: ./database ports: - "3307:3306" playerground: build: context: . dockerfile: Dockerfile command: node_modules/.bin/nodemon --exec npm start environment: ENVIRONMENT: development ports: - "9090:9090" links: - db volumes: - .:/home/app/playerground - /home/app/playerground/node_modules 

另一件事是我从Nodejs的configuration文件:

 //Database 'development' : { 'host' : process.env.HOSTNAME || 'localhost', 'user' : 'root', 'password' : 'root', 'database' : 'playerground' }, //Server 'development' : { 'host' : process.env.HOSTNAME || '127.0.0.1', 'port' : 3000 }, 

你可以帮我吗? 谢谢

在您的应用程序configuration中,数据库主机不指向您的MySql容器。 您将其指向本地主机,即应用程序容器。 在Compose文件中,您可以使用以下命令显式地将链接命名为db容器:

  links: - db:db 

然后你的数据库容器可以到达主机名db 。 你可以在你的应用程序configuration中对这个主机进行硬编码,因为对于所有的环境来说,只要你使用相同的Compose文件,它就是一样的。

此外,如果您使用的是最新版本的Docker,则不需要在同一个Dockernetworking中的容器之间发布端口,因此您可以将其从Compose文件中删除:

 ports: - "3307:3306" 

然后db容器将被应用程序容器访问,但不是在外部。