【问题标题】:Getting SequelizeConnectionRefusedError: when running docker with sequelize获取 SequelizeConnectionRefusedError:使用 sequelize 运行 docker 时
【发布时间】:2017-07-17 03:09:29
【问题描述】:

我正在使用以下配置运行 docker

web:
  image: ca9a385372b0
  volumes:
    - .:/src
  ports:
    - "8000:8000"
  container_name: web
  links:
    - mysql
mysql:
  image: 7666f75adb6b
  environment:
  container_name: mysql
  ports:
   - "6603:3306"
  volumes:
   - ./data/mysql:/var/lib/mysql

启动容器后,我可以通过我的主终端很好地连接到端口 6603 上的 mysql。

mysql -uuser -p -h127.0.0.1 -P6603

但是在通过我的 nodejs 应用程序容器进行操作时出现以下错误。我已经链接了容器。我可以看到它试图使用内部 IP 和所有连接到 mysql 容器。

未处理的拒绝 SequelizeConnectionRefusedError: 连接 ECONNREFUSED 172.17.0.3:6603

我还检查了 mysql 容器的权限并看到了这个:

 GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION

我有什么遗漏吗?

【问题讨论】:

    标签: mysql node.js docker docker-compose


    【解决方案1】:

    mysql 容器暴露了 3306 端口(如您的端口映射所示,它将外部端口 6603 连接到暴露的容器端口 3306)。

    ports:
      - "6603:3306"
    

    我们知道这是正确的,因为您可以从外部使用它并连接到 mysql。

    mysql -uuser -p -h127.0.0.1 -P6603
    

    您的节点应用正在尝试连接到外部端口 6603(我们可以从错误消息中看到)。

    未处理的拒绝 SequelizeConnectionRefusedError: connect ECONNREFUSED 172.17.0.3:6603

    但节点在 docker 网络内部运行,而不是外部。它无法访问外部映射的端口。

    解决方案:告诉节点应用使用端口 3306。

    【讨论】:

    • 谢谢。那行得通。还是习惯理解 docker。
    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2019-05-28
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2017-04-18
    • 2021-08-18
    相关资源
    最近更新 更多