加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

NodeJS Mysql与Docker Compose 2

发布时间:2020-12-16 03:39:20 所属栏目:安全 来源:网络整理
导读:我正在尝试构建一个docker-compose文件来本地部署连接到mysql服务器的NodeJS应用程序.我已经尝试了所有东西(在Stackoverflow中阅读了很多教程和一些问题),但我一直收到ECONNREFUSED错误. 这是NodeJS的Dockerfile: ##NodejsFROM node:latestRUN useradd --us

我正在尝试构建一个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-compose:

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的配置文件:

//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
},

你能帮助我吗?
谢谢

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

  links:
    - db:db  

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

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

ports:
  - "3307:3306"  

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读