在将此帖子标记为重复注释之前,我已经在这里找到了其他相关的帖子,并且在没有找到确切解决方案的情况下,我几乎可以在任何地方查看过。我只是在docker-compose.yml
版本之间感到困惑,并且将端口彼此链接。
问题出在这里: 我用Docker创建了两个容器,一个容器托管NodeJS服务器,一个容器托管MySQL数据库。
我的 docker-compose.yml 如下:
version: '3'
services:
server:
build: ./server/
ports:
- "8080:8080"
depends_on:
- db
db:
build: ./db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: 1
MYSQL_DATABASE: dashboard_nodejs
MYSQL_USER: root
MYSQL_PASSWORD: password
client:
image: angular_app
build: ./front/
ports:
- "4242:80"
depends_on:
- server
运行docker-compose up
时,我的所有应用程序均已构建并运行,直到服务器尝试连接到MySQL并以:p退出为止,都没有问题。
Error: connect ECONNREFUSED 172.20.0.2:3306 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)
我的数据库的 dockerfile 仅包含
FROM mysql
COPY init_db.sql /docker-entrypoint-initdb.d/
和 init_db.sql 当前为
CREATE DATABASE IF NOT EXISTS dashboard_nodejs;
GRANT ALL PRIVILEGES ON dashboard_nodejs.*
TO 'root'@'%' IDENTIFIED BY 'password'
WITH GRANT OPTION;
最后,我的服务器尝试使用以下参数建立连接:
var con = mySql.createConnection({
host: "db",
user: "root",
password: "password",
database: "dashboard_nodejs"
});
我不知道为什么即使使用正确的凭据,mysql也会拒绝连接。 如果对此特殊情况进行了讨论,我表示歉意。
答案 0 :(得分:0)
将btnAdd
添加到数据库服务。