2016-09-19 86 views
6

我正在嘗試構建一個docker-compose文件以在本地部署連接到mysql服務器的NodeJS應用程序。我已經嘗試了一切(在Stackoverflow中閱讀了很多教程和一些問題),但是我一直在收到ECONNREFUSED錯誤。 這是從的NodeJS我Dockerfile:NodeJS + Mysql與Docker Compose 2

##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

這是我的搬運工,撰寫:

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

你能幫助我嗎? 謝謝

回答

2

在您的應用程序配置中,數據庫主機未指向您的MySql容器。您將其指向本地主機,即應用程序容器。在撰寫文件,你可以使用顯式命名的鏈接數據庫容器:

links: 
    - db:db 

然後你的數據庫容器可以在主機名db到達。您可以在您的應用配置中對該主機進行硬編碼,因爲它對於所有環境都是一樣的,只要您使用相同的Compose文件即可。

此外,如果您使用的是最近的碼頭工人的版本,你不需要同泊塢網絡在容器之間發佈端口 - 這樣你就可以從你的撰寫文件中刪除此:

ports: 
    - "3307:3306" 

然後數據庫容器可以被應用程序容器訪問,但不能在外部訪問。

+0

謝謝。顯然它解決了ECONNREFUSED,但它給我一個ER_HOST_NOT_PRIVILEGED錯誤。你有什麼想法嗎?謝謝! –

+0

[這個問題](http://stackoverflow.com/questions/27868965/docker-mysql-host-not-privileged)可能有答案 - 看起來像MySql用戶的權限問題。嘗試'授予所有特權...'爲您的節點數據庫用戶。 –

+0

我已經試過了一個腳本,並將它添加到我的Dockerfile「ADD setup.sql /docker-entrypoint-initdb.d」但它沒有工作。但我會盡力在這裏繼續測試。非常感謝!! –