我的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
有趣的錯誤...你可以嘗試創建一個腳本,首先運行'ifconfig',然後運行腳本並啓動它作爲啓動命令?在這種情況下,哪個是輸出? – mgaido 2014-11-08 10:01:15
@ mark91,看到我的更新內聯 – etang 2014-11-08 11:48:50