NodeJS + Mysql与Docker Compose 2
问题描述:
我正在尝试构建一个docker-compose文件以在本地部署连接到mysql服务器的NodeJS应用程序。我已经尝试了一切(在*中阅读了很多教程和一些问题),但是我一直在收到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
},
你能帮助我吗? 谢谢
答
在您的应用程序配置中,数据库主机未指向您的MySql容器。您将其指向本地主机,即应用程序容器。在撰写文件,你可以使用显式命名的链接数据库容器:
links:
- db:db
然后你的数据库容器可以在主机名db
到达。您可以在您的应用配置中对该主机进行硬编码,因为它对于所有环境都是一样的,只要您使用相同的Compose文件即可。
此外,如果您使用的是最近的码头工人的版本,你不需要同泊坞网络在容器之间发布端口 - 这样你就可以从你的撰写文件中删除此:
ports:
- "3307:3306"
然后数据库容器可以被应用程序容器访问,但不能在外部访问。
谢谢。显然它解决了ECONNREFUSED,但它给我一个ER_HOST_NOT_PRIVILEGED错误。你有什么想法吗?谢谢! –
[这个问题](http://*.com/questions/27868965/docker-mysql-host-not-privileged)可能有答案 - 看起来像MySql用户的权限问题。尝试'授予所有特权...'为您的节点数据库用户。 –
我已经试过了一个脚本,并将它添加到我的Dockerfile“ADD setup.sql /docker-entrypoint-initdb.d”但它没有工作。但我会尽力在这里继续测试。非常感谢!! –