在将这篇文章标记为重复注解之前,我已经查看了这里和几乎所有地方的其他相关文章,但没有找到我的确切案例的解决方案。我只是一直搞不清 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之前,我的所有应用程序都是无问题构建和运行的,退出时显示:
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\ u 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拒绝,即使有(在我看来)正确的凭据。如果这个案子已经讨论过了,我提前道歉。
1条答案
按热度按时间lsmd5eda1#
添加
ports: "3306:3306"
到数据库服务。