【问题标题】:Connecting a NodeJS container to a MySQL database将 NodeJS 容器连接到 MySQL 数据库
【发布时间】:2019-04-14 14:33:38
【问题描述】:

在将此帖子标记为重复说明之前,我已经查看了此处的其他相关帖子以及几乎所有我能找到的地方,但没有找到针对我的确切案例的解决方案。我只是在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_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 也会拒绝连接。 如果已经讨论过这个特殊情况,我提前道歉。

【问题讨论】:

    标签: mysql node.js docker


    【解决方案1】:

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

    【讨论】:

    • 我已经测试过了,结果是这样的:ERROR: for db Cannot start service db: driver failed programming external connectivity on endpoint <db>: Error starting userland proxy: Bind for 0.0.0.0:3306: unexpected error Permission denied
    • 您使用什么操作系统?可以试试运行吗priviledged: true不要永久运行,试试看,因为有安全隐患。
    • 我正在运行 Windows 10 专业版。我应该在哪里添加该属性 privileged 属性?
    • 到构建行之后的 db 服务。您还确定,以前的容器没有使用 3306 端口吗?用docker ps -a检查它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2019-04-14
    • 2022-01-07
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多