我的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.js
和cd /src; nodejs server.js
,其中前者会给我连接错误而后者可以正常工作
所以docker run -p 49160:8080 -d <image> /bin/sh -c "cd /src; nodejs server.js"
实际上有效
ifconfig
吗? THX
答案 0 :(得分:0)
好的,所以问题似乎是您从中启动命令的目录。让我们尝试在CMD命令之前在Dockerfile中添加它:
WORKDIR /src
PS不,谢谢,不再需要ifconfig
。