Docker容器nodejs连接到外部mysql失败
我的nodejs应用程序正在连接到mysql外部,如果我以 docker run -p 49160:8080 -t -i <image>
和手动运行nodejs /src/server.js
交互式启动,这一切都很好。 但是,当我从守护进程docker run -p 49160:8080 -d <image>
开始时,它将无法连接到外部mysql。Docker容器nodejs连接到外部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
UPDATE:
我发现病因竟是nodejs /src/server.js
和cd /src; nodejs server.js
其中前者会给我连接错误和后者工作正常
所以docker run -p 49160:8080 -d <image> /bin/sh -c "cd /src; nodejs server.js"
实际工作
马克,你有什么想法?仍然需要输出ifconfig
? thx
好的,所以问题似乎是你启动你的命令的目录。让我们给一个尝试CMD命令之前,您Dockerfile添加此:
WORKDIR /src
PS没有感谢,没有更多的需要ifconfig
。
Thx @ mark91,我会稍后尝试,但只是好奇为什么会影响与MySQL的连接,是否真的是nodejs问题而不是docker的 – etang 2014-11-08 12:08:33
我认为原因是在你的js您需要的应用程序或包含来自另一个文件的凭证,而这些文件在您找不到的情况下未在正确的目录中执行您的命令。为了确保这一点,您可以打印它们进行调试。 – mgaido 2014-11-08 12:16:43
是的,我正在使用dotenv并调用dotenv.load()加载server.js文件夹中的.env文件。所以它真的有可能是dotenv工作文件夹与nodejs相关,我将验证.env是否加载 – etang 2014-11-08 12:25:37
有趣的错误...你可以尝试创建一个脚本,首先运行'ifconfig',然后运行脚本并启动它作为启动命令?在这种情况下,哪个是输出? – mgaido 2014-11-08 10:01:15
@ mark91,看到我的更新内联 – etang 2014-11-08 11:48:50