我正在使用以下配置
运行dockerweb:
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
我有什么遗失的吗?
答案 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。