获取SequelizeConnectionRefusedError:当运行docker与sequ​​elize

我正在运行docker以下configuration

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 

启动容器后,我可以通过我的主terminal很好地连接到端口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容器暴露了端口3306(如在你的端口映射中看到的那样,它将外部端口6603连接到暴露的容器端口3306)。

 ports: - "6603:3306" 

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

 mysql -uuser -p -h127.0.0.1 -P6603 

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

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

但节点在dockernetworking运行,而不是在外面。 它无法访问外部映射的端口。

解决scheme:告诉节点应用程序使用端口3306。