首页 > 解决方案 > 将 MySQL db 连接到 docker env 中的 Loopback4 App

问题描述

我实际上正在开发一个 loopback4 应用程序来发现这项技术,但我不知道如何将本地 MySQL 服务连接到我的应用程序。

我所有的环境都是通过 docker-compose 设置的:我目前有一个 mysql 服务来存储我的数据,一个 phpmyadmin 服务来与之交互,还有一个 cms 服务,这是我的环回应用程序。

首先 docker-compose.yml 来设置 mysql 和 phpmyadmin:

version: "3.5"

services:
    mysql:
        image: mysql:5.7
        container_name: mysql
        restart: always
        volumes:
        - ./volumes/mysql/:/var/lib/mysql
        networks:
        - mysql_network
        environment:
            MYSQL_ROOT_PASSWORD: passroot

    phpmyadmin:
        image: phpmyadmin/phpmyadmin:4.8
        restart: always
        networks:
        - mysql_network
        ports:
        - 8890:80
        environment:
            PMA_HOST: mysql

networks:
    mysql_network:
        name: mysql_network

第二个设置环回应用程序:

version: "3.5"

services:
    cms:
        build:
            context: ./cms
            dockerfile: Dockerfile
        restart: always
        ports:
            - "8885:3000"
        networks:
            - "my_network"
            - "mysql_network"
        tty: true
        environment:
            MYSQL_HOST: mysql
            MYSQL_USER: root
            MYSQL_PASSWORD: passroot
            MYSQL_DATABASE: example
            API_URL: "http://cms:3000"

networks:
    my_network:
    mysql_network:
        external: true

我按照文档(https://loopback.io/doc/en/lb4/MySQL-connector.html)创建了我的数据库连接器和我的模型。但是运行它时仍然有“握手不活动超时”。我试图通过acquireTimeout配置值在超时之前添加时间,但这并没有改变任何东西。

const config = {
  name: 'example',
  connector: 'mysql',
  host: process.env.MYSQL_HOST,
  port: process.env.MYSQL_PORT || 3306,
  user: process.env.MYSQL_USER,
  password: process.env.MYSQL_PASSWORD,
  database: process.env.MYSQL_DATABASE,
  connectTimeout: 30000,
  acquireTimeout: 30000
};

我确定我错过了一个愚蠢的细节,但我不知道是什么。有人有线索吗?

提前致谢

标签: mysqldockerconnectionloopbackjsloopback4

解决方案


推荐阅读