node.js - 启动用户态代理时出错:绑定 127.0.0.1:3306 失败:端口已分配。在 docker 运行命令上
问题描述
我有一个连接到 MySQL 数据库的 Node 应用程序的 Docker 容器。数据库托管在容器外的本地主机中。
首先,我尝试通过 command 运行它docker run -p 3010: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)
在我的研究中,我发现该错误可能与外部端口的访问有关,如此链接https://docs.docker.com/config/containers/container-networking/#published-ports中所述。
因此,我尝试运行传递另一个参数的命令,如下所示docker run -p 3010:80 -p 127.0.0.1:3306:3306 nigel/insideroil
:但是,现在,错误是:
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
我很感激任何帮助。提前致谢
解决方案
如果您想从容器访问主机上的端口,您应该使用主机 IP 地址(而不是 127.0.0.1)。当然,DB 也应该监听主机 IP 地址(不是 127.0.0.1)。
或者也在容器内运行数据库并通过名称使用直接连接。
推荐阅读
- python - 如何在 Visual Studio 2022 预览版中为 IntelliSense 选择 Python 解释器?
- java - 我正在尝试使用 stomp over websocket 将数据从浏览器发送到移动应用程序,但我遇到了 IP 地址问题
- android - Android Virtual Device 中的屏幕太大
- database - 如何将未导出的 MongoDB 文件转换为数据库?
- java - 如何在不损失图像质量的情况下将 Spring Boot 中的图像压缩到 kb
- ios - .swiftsourceinfo 的 Xcode 13 警告
- angular - 如何一键从另一个组件打开 mat 菜单
- node.js - 如何在 Typescript 中正确使用环境变量?
- chatbot - UserWarning: Entity entity 'cheque_number' 只有 1 个训练样例!最小值为 2,因此训练可能会失败
- java - 由于登录失败错误,无法连接到 SQL Server 数据库