我创建了一个由docker-compose运行的节点应用程序。该应用程序需要一个同时启动的mysql服务器,但是当我到达节点应用程序中的要访问服务器的位置时,出现以下错误:

events.js:136
throw er; // Unhandled 'error' event
^
Error: connect ECONNREFUSED 127.0.0.1:3306
 at Object._errnoException (util.js:1031:13)
 at _exceptionWithHostPort (util.js:1052:20)
 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1195:14)
 --------------------
 at Protocol._enqueue (/usr/src/node_modules/mysql/lib/protocol/Protocol.js:145:48)
 at Protocol.handshake (/usr/src/node_modules/mysql/lib/protocol/Protocol.js:52:23)
 at Connection.connect (/usr/src/node_modules/mysql/lib/Connection.js:130:18)
 at Connection._implyConnect (/usr/src/node_modules/mysql/lib/Connection.js:461:10)
 at Connection.query (/usr/src/node_modules/mysql/lib/Connection.js:206:8)
 at Object.<anonymous> (/usr/src/configs/passport.js:15:12)
 at Module._compile (module.js:641:30)
 at Object.Module._extensions..js (module.js:652:10)
 at Module.load (module.js:560:32)
 at tryModuleLoad (module.js:503:12)
 at Function.Module._load (module.js:495:3)
 at Module.require (module.js:585:17)
 at require (internal/module.js:11:18)
 at Object.<anonymous> (/usr/src/app.js:47:1)
 at Module._compile (module.js:641:30)
 at Object.Module._extensions..js (module.js:652:10)

相应的节点代码本质上是这样的:
var mysql = require('mysql');
var dbconfig = require('./database');
var connection = mysql.createConnection(dbconfig.connection);

而database.js看起来像这样:
module.exports = {
  'connection': {
    'host': '127.0.0.1',
    'user': 'user',
    'password': 'password'
  },
  'database': 'website_user',
  'users_table': 'users'
};

所有这些都可以在我的MacBook上正常运行。当我打开第二个终端窗口并执行时:
mysql -h 127.0.0.1 -u user -p

我可以成功连接到该服务器。指定的用户与在节点应用程序中传递给我的连接建立的用户相同。我大概已经花了四个小时弄乱了,不知道我在做什么错。为了使其正常工作,我必须更改什么?

让我知道我是否需要提供任何帮助我解决问题的东西。谢谢!

最佳答案

您正在尝试从节点容器连接到127.0.0.1:3306-但这就是节点容器本身。如果您的数据库服务名为mysql,则您应该能够使用这样的配置(假设docker-compose.yml版本2或更高版本):

module.exports = {
  'connection': {
    'host': 'mysql',
    'user': 'user',
    'password': 'password'
  },
  'database': 'website_user',
  'users_table': 'users'
};

关于mysql - 无法从 Node 但从终端访问mysql容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48291342/

10-16 17:34
查看更多