簡體   English   中英

Docker容器Node.js與外部mysql的連接失敗

[英]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.jsnodejs /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.jscd /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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM