2017-01-26 23 views
0

私の質問はこれと似ています:Cant connect to localhost database with Sequelize (nodejs)ですが、それにはいくつかの違いがあり、私は答えを使うことができませんでした。sequelize:localhost経由でログインできませんか?

ドッカーコンテナからmysqlサーバにアクセスしようとしています。アクセスはmysqld.sockのマッピングを介して提供されます。基本的な接続が確認されます。たとえば、コンテナ内では以下のようにコマンドを実行できます。

# mysql --host=localhost --user=root --password=... 

ただし、ホストとして「127.0.0.1」を使用して実行することはできません。これは私が次に何をする必要があるかを探すためのものかもしれません。

次に、以下のようにSequelizeに基づいてnodejsプログラムを使用してmysqlアクセスを検証しようとします。

var Sequelize = require('sequelize') 
var sequelize = new Sequelize('mysql', 'root', '...', { 
    host: 'localhost', 
    dialect: 'mysql', 
    pool: { 
    max: 5, 
    min: 0, 
    idle: 10000 
    }, 
}); 

sequelize 
    .authenticate() 
    .then(function(err) { 
    console.log('Connection has been established successfully.'); 
    }) 
    .catch(function (err) { 
    console.log('Unable to connect to the database:', err); 
    }); 

実行すると接続が拒否されました。

Unable to connect to the database: { SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306 
at Handshake._callback (/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:80:20) 
at Handshake.Sequence.end (/node_modules/mysql/lib/protocol/sequences/Sequence.js:86:24) 
at Protocol.handleNetworkError (/node_modules/mysql/lib/protocol/Protocol.js:364:14) 
at Connection._handleNetworkError (/node_modules/mysql/lib/Connection.js:428:18) 
at emitOne (events.js:96:13) 
at Socket.emit (events.js:188:7) 
at emitErrorNT (net.js:1278:8) 
at _combinedTickCallback (internal/process/next_tick.js:74:11) 
at process._tickCallback (internal/process/next_tick.js:98:9) 
    name: 'SequelizeConnectionRefusedError', 
    message: 'connect ECONNREFUSED 127.0.0.1:3306', 
    parent: 
    { Error: connect ECONNREFUSED 127.0.0.1:3306 
    at Object.exports._errnoException (util.js:1022:11) 
    at exports._exceptionWithHostPort (util.js:1045:20) 
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1087:14) 
    -------------------- 
    at Protocol._enqueue (/node_modules/mysql/lib/protocol/Protocol.js:141:48) 
    at Protocol.handshake (/node_modules/mysql/lib/protocol/Protocol.js:52:41) 
    at Connection.connect (/node_modules/mysql/lib/Connection.js:130:18) 
    at /node_modules/sequelize/lib/dialects/mysql/connection-manager.js:75:16 
    at Promise._execute (/node_modules/bluebird/js/release/debuggability.js:300:9) 
    at Promise._resolveFromExecutor (/node_modules/bluebird/js/release/promise.js:481:18) 
    at new Promise (/node_modules/bluebird/js/release/promise.js:77:14) 
    at ConnectionManager.connect (/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:55:10) 
    at ConnectionManager.<anonymous> (/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:247:43) 
    at ConnectionManager.tryCatcher (/node_modules/bluebird/js/release/util.js:16:23) 
    at Promise._settlePromiseFromHandler (/node_modules/bluebird/js/release/promise.js:510:31) 
    at Promise._settlePromise (/node_modules/bluebird/js/release/promise.js:567:18) 
    at Promise._settlePromise0 (/node_modules/bluebird/js/release/promise.js:612:10) 
    at Promise._settlePromises (/node_modules/bluebird/js/release/promise.js:691:18) 
    at Async._drainQueue (/node_modules/bluebird/js/release/async.js:133:16) 
    at Async._drainQueues (/node_modules/bluebird/js/release/async.js:143:10) 
code: 'ECONNREFUSED', 
errno: 'ECONNREFUSED', 
syscall: 'connect', 
address: '127.0.0.1', 
port: 3306, 
fatal: true }, 
    original: 
    { Error: connect ECONNREFUSED 127.0.0.1:3306 
    at Object.exports._errnoException (util.js:1022:11) 
    at exports._exceptionWithHostPort (util.js:1045:20) 
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1087:14) 
    -------------------- 
    at Protocol._enqueue (/node_modules/mysql/lib/protocol/Protocol.js:141:48) 
    at Protocol.handshake (/node_modules/mysql/lib/protocol/Protocol.js:52:41) 
    at Connection.connect (/node_modules/mysql/lib/Connection.js:130:18) 
    at /node_modules/sequelize/lib/dialects/mysql/connection-manager.js:75:16 
    at Promise._execute (/node_modules/bluebird/js/release/debuggability.js:300:9) 
    at Promise._resolveFromExecutor (/node_modules/bluebird/js/release/promise.js:481:18) 
    at new Promise (/node_modules/bluebird/js/release/promise.js:77:14) 
    at ConnectionManager.connect (/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:55:10) 
    at ConnectionManager.<anonymous> (/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:247:43) 
    at ConnectionManager.tryCatcher (/node_modules/bluebird/js/release/util.js:16:23) 
    at Promise._settlePromiseFromHandler (/node_modules/bluebird/js/release/promise.js:510:31) 
    at Promise._settlePromise (/node_modules/bluebird/js/release/promise.js:567:18) 
    at Promise._settlePromise0 (/node_modules/bluebird/js/release/promise.js:612:10) 
    at Promise._settlePromises (/node_modules/bluebird/js/release/promise.js:691:18) 
    at Async._drainQueue (/node_modules/bluebird/js/release/async.js:133:16) 
    at Async._drainQueues (/node_modules/bluebird/js/release/async.js:143:10) 
code: 'ECONNREFUSED', 
errno: 'ECONNREFUSED', 
syscall: 'connect', 
address: '127.0.0.1', 
port: 3306, 
fatal: true } } 

私はこの問題は、Sequelizeは「127.0.0.1」にプログラムに与えられ、127.0.0.1経由でMySQLをアクセスすると、コンテナ内では機能しない「ローカルホスト」を翻訳しようとしている疑いがあります。

ありがとうございました。

答えて

0

使用して、(よく、方法で)解決dialectOptions

dialectOptions: { 
    socketPath: '/var/run/mysqld/mysqld.sock', 
    ... 
} 
関連する問題