将nodejs容器连接到mysql数据库

kb5ga3dv  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(401)

在将这篇文章标记为重复注解之前,我已经查看了这里和几乎所有地方的其他相关文章,但没有找到我的确切案例的解决方案。我只是一直搞不清 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拒绝,即使有(在我看来)正确的凭据。如果这个案子已经讨论过了,我提前道歉。

lsmd5eda

lsmd5eda1#

添加 ports: "3306:3306" 到数据库服务。

相关问题