docker 内部的应用无法连接mysql

我在 docker 内部安装了 mysql, 并且在 mac 是能够使用的, host 是 127.0.0.1
我使用 docker 的 build 命令把我的node应用放到 docker 上后,host 无论是 127.0.0.1还是0.0.0.0都是连接不上,都是报下面这个错误

connect ECONNREFUSED 0.0.0.0:3306

at Protocol.Object.<anonymous>.Protocol._enqueue (node_modules/mysql/lib/protocol/Protocol.js:144:48)
      at Protocol.handshake (node_modules/mysql/lib/protocol/Protocol.js:51:23)
      at Connection.connect (node_modules/mysql/lib/Connection.js:118:18)
      at new connect (sdk.js:23:29)
      at Object.test (sdk.test.js:44:24)
阅读 4.2k
2 个回答

因为node在container里面,mysql也在container里面,这两个不是一个container(可以粗略理解为不在一台机器上运行),所以在node代码中mysql的host不是本地网络127.0.0.1,而是在compose文件中给mysql指定的hostname。

我在使用docker-compose时,代码内部填写的是docker-compose.yml对应的service名称 mysql56

version: "3"
services:
  mysql56:
    image: mysql:5.6
    ports:
      - 3306:3306
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题