获取SequelizeConnectionRefusedError:使用sequelize运行docker时

时间:2017-02-26 14:48:07

标签: mysql node.js docker docker-compose

我正在使用以下配置

运行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 app容器进行操作时出现以下错误。我已经连接了容器。我可以看到它试图使用内部IP和所有连接到mysql容器。

  

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

我还检查了mysql容器的权限,看看:

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

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:0)

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。