无法从节点访问mysql容器,但是从终端访问

问题描述 投票:0回答:1

我创建了一个由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

我可以成功连接到此服务器。在那里指定的用户与在节点应用程序中传递给我的连接建立的用户相同。我现在已经乱了四个小时了,不知道我做错了什么。我需要更改什么才能使其正常工作?

如果我需要提供任何内容以帮助解决我的问题,请告诉我。谢谢!

mysql node.js docker docker-compose
1个回答
2
投票

您正在尝试从节点容器连接到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'
};
© www.soinside.com 2019 - 2024. All rights reserved.