Docker容器nodejs与外部mysql的连接失败

时间:2014-11-08 09:16:04

标签: javascript mysql node.js connection docker

我的nodejs应用程序从外部连接到mysql,如果我以交互方式启动它,这一切都很好 docker run -p 49160:8080 -t -i <image>,然后手动运行nodejs /src/server.js。 但是,当我从守护进程docker run -p 49160:8080 -d <image>开始时,它将无法连接到外部mysql。

尝试docker start <container>然后docker exec <container> nodejs /src/server.js,同样的错误。

试过 docker start <container>docker attach <container>,运行nodejs /src/server.js,然后就可以了。

Dockerfile:

FROM ubuntu

COPY . /src

RUN apt-get install nodejs
RUN apt-get install npm
RUN cd /src; npm install
EXPOSE 8080
CMD ["nodejs","/src/server.js"]

/src/server.js:

var express = require('express');
var mysql = require('mysql'),
myconnection = require('express-myconnection');

...

app.use(myconnection(mysql, {
  ...
},'request'));

...

app.get('/',function(req,res) {
   req.getConnection(function(err,connection) {
      if(err) 
          // giving out err here, fail to connect

更新:

我发现原因实际上是nodejs /src/server.jscd /src; nodejs server.js,其中前者会给我连接错误而后者可以正常工作

所以docker run -p 49160:8080 -d <image> /bin/sh -c "cd /src; nodejs server.js"实际上有效

马克,你知道吗?还需要输出ifconfig吗? THX

1 个答案:

答案 0 :(得分:0)

好的,所以问题似乎是您从中启动命令的目录。让我们尝试在CMD命令之前在Dockerfile中添加它:

 WORKDIR /src

PS不,谢谢,不再需要ifconfig