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容器将被应用程序容器访问,但不是在外部。