[英]NodeJS ENOTFOUND db when connecting to MySQL container on docker
[英]Docker container nodejs connection to external mysql fail
我的nodejs應用程序從外部連接到mysql,如果我通過docker run -p 49160:8080 -t -i <image>
nodejs /src/server.js
手動運行nodejs /src/server.js
, 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>
, nodejs /src/server.js
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
cd /src; nodejs server.js
,其中前者會給我連接錯誤,而后者可以正常工作
所以docker run -p 49160:8080 -d <image> /bin/sh -c "cd /src; nodejs server.js"
實際上有效
馬克,你有什么主意嗎? 還需要ifconfig
輸出嗎? 謝謝
好的,看來問題出在您從中啟動命令的目錄。 讓我們嘗試將其添加到CMD命令之前的Dockerfile中:
WORKDIR /src
PS不,謝謝,不再需要ifconfig
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.