Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 启动userland代理时出错:绑定127.0.0.1:3306失败:端口已分配。关于docker运行命令_Node.js_Docker - Fatal编程技术网

Node.js 启动userland代理时出错:绑定127.0.0.1:3306失败:端口已分配。关于docker运行命令

Node.js 启动userland代理时出错:绑定127.0.0.1:3306失败:端口已分配。关于docker运行命令,node.js,docker,Node.js,Docker,我有一个连接到MySQL数据库的节点应用程序的Docker容器。数据库托管在容器外部的my localhost中 首先,我尝试通过命令dockerrun-p3010:80 nigel/insideroil运行它。该过程正常启动,编译所有内容,但当应用程序尝试连接到数据库时,我遇到以下错误: Unhandled rejection SequelizeBaseError: connect ECONNREFUSED 127.0.0.1:3306 at Handshake.<anonymo

我有一个连接到MySQL数据库的节点应用程序的Docker容器。数据库托管在容器外部的my localhost中

首先,我尝试通过命令
dockerrun-p3010:80 nigel/insideroil
运行它。该过程正常启动,编译所有内容,但当应用程序尝试连接到数据库时,我遇到以下错误:

Unhandled rejection SequelizeBaseError: connect ECONNREFUSED 127.0.0.1:3306
    at Handshake.<anonymous> (/usr/src/insider_oil/server/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:80:20)
    at Handshake.<anonymous> (/usr/src/insider_oil/server/node_modules/mysql/lib/Connection.js:502:10)
    at Handshake._callback (/usr/src/insider_oil/server/node_modules/mysql/lib/Connection.js:468:16)
    at Handshake.Sequence.end (/usr/src/insider_oil/server/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
    at Protocol.handleNetworkError (/usr/src/insider_oil/server/node_modules/mysql/lib/protocol/Protocol.js:361:14)
    at Connection._handleNetworkError (/usr/src/insider_oil/server/node_modules/mysql/lib/Connection.js:420:18)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:189:7)
    at emitErrorNT (net.js:1280:8)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)

谢谢你的帮助。提前感谢

如果您希望从容器访问主机上的端口,则应使用主机IP地址(而不是127.0.0.1)。当然,DB也应该监听主机IP地址(不是127.0.0.1)


也可以在容器内运行DB,并通过名称使用直接连接。

-p将本地计算机上的端口重定向到容器内的端口(当有人访问127.0.0.1:3306时,它将转发给docker)。您需要的是其他东西,一种从外部连接到本地机器的方式。如果您有127.0.0.1的名称或更好的IP地址,请改用它。这就是错误所在。感谢您的回复@MatthieuBrucher。地址127.0.0.1实际上是我的本地主机,我的开发数据库所在的位置。从docker容器访问它的更好方法是什么?不,127.0.0.1是localhost的默认地址,docker的默认地址是。。。码头工人自己。你通常有另一个IP地址。你可能想先看一下文档:如果你真的需要使用127.0.0.1:3306来连接MySQL,那么在运行app container时不能使用-p标志,而应该使用-net=host。就像:docker run-tid-net=host。。。。
docker: Error response from daemon: driver failed programming external connectivity on endpoint cocky_wilson (c702c7f659ee766ba11993ed6b2c3ce851f6a6cced3d2c04a31bb578a11b2b40): Error starting userland proxy: Bind for 127.0.0.1:3306 failed: port is already allocated.
ERRO[0000] error waiting for container: context canceled