NodeJS Mysql与Docker Compose 2

前端之家收集整理的这篇文章主要介绍了NodeJS Mysql与Docker Compose 2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试构建一个docker-compose文件来本地部署连接到mysql服务器的NodeJS应用程序.我已经尝试了所有东西(在Stackoverflow中阅读了很多教程和一些问题),但我一直收到ECONNREFUSED错误.
这是NodeJS的Dockerfile:

  1. ##Nodejs
  2. FROM node:latest
  3. RUN useradd --user-group --create-home --shell /bin/false app
  4. ENV HOME=/home/app
  5. COPY package.json npm-shrinkwrap.json $HOME/playerground/
  6. RUN chown -R app:app $HOME/*
  7. USER app
  8. WORKDIR $HOME/playerground
  9. RUN npm cache clean && npm install --silent --progress=false
  10. USER root
  11. COPY . $HOME/playerground
  12. RUN chown -R app:app $HOME/*
  13. USER app

这是我的MysqL Dockerfile:

  1. FROM MysqL:latest
  2. ENV MysqL_ROOT_PASSWORD root
  3. ENV MysqL_DATABASE playerground
  4. ENV MysqL_USER root
  5. ENV MysqL_PASSWORD root

这是我的docker-compose:

  1. version: '2'
  2. services:
  3. db:
  4. build: ./database
  5. ports:
  6. - "3307:3306"
  7. playerground:
  8. build:
  9. context: .
  10. dockerfile: Dockerfile
  11. command: node_modules/.bin/nodemon --exec npm start
  12. environment:
  13. ENVIRONMENT: development
  14. ports:
  15. - "9090:9090"
  16. links:
  17. - db
  18. volumes:
  19. - .:/home/app/playerground
  20. - /home/app/playerground/node_modules

另一件事是来自Nodejs的配置文件

  1. //Database
  2. 'development' : {
  3. 'host' : process.env.HOSTNAME || 'localhost','user' : 'root','password' : 'root','database' : 'playerground'
  4. },//Server
  5. 'development' : {
  6. 'host' : process.env.HOSTNAME || '127.0.0.1','port' : 3000
  7. },

你能帮助我吗?
谢谢

最佳答案
在您的应用程序配置中,数据库主机未指向您的MysqL容器.您将其指向本地主机,即应用程序容器.在Compose文件中,您可以使用以下命令显式指定db容器的链接

  1. links:
  2. - db:db

然后可以在主机名db处访问您的数据库容器.您可以在应用配置中对该主机进行硬编码,因为只要您使用相同的Compose文件,它对所有环境都是相同的.

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

  1. ports:
  2. - "3307:3306"

然后,应用程序容器可以访问db容器,但不能从外部访问.

猜你在找的Docker相关文章