Docker 的超集无法添加到外部 mysql 的连接

Superset with Docker cannot add connection to external mysql

我是使用 Ubuntu 的新手,我正在尝试安装 apache-superset 并通过直接 sudo docker pull apache/superset 使用 Docker 成功安装了它,但我卡在了将数据库连接器添加到 运行 超集

至于我的本地数据库,我正在使用 MySQL 并且我碰巧在本地主机中使用 SSH 隧道在服务器中访问它。所以我认为从 Docker 容器的角度来看,这一定是一个“外部”数据库

我尝试过的:

  1. 我从 pip3
  2. 安装了 mysqlclient
  3. 通过以下引用:https://devopsheaven.com/docker/devops/add-host/link/2017/10/04/connect-external-services-from-docker-container.html

我试着输入:sudo docker run -it mysql -h 192.168.100.1 -P 33063 -u czjovan --password=mypw cz_payment_merged 但后来我得到:

2021-03-04 11:34:53+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.
2021-03-04 11:34:53+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
    command was: mysqld -h 192.168.100.1 -P 33063 -u czjovan --password=mypw cz_payment_merged --verbose --help --log-bin-index=/tmp/tmp.EV6L0jrspQ
    2021-03-04T11:34:53.402148Z 0 [ERROR] [MY-010124] [Server] Fatal error: Can't change to run as user 'czjovan' ;  Please check that the user exists!
2021-03-04T11:34:53.403355Z 0 [ERROR] [MY-010119] [Server] Aborting
  1. 也可以通过以下方式:From inside of a Docker container, how do I connect to the localhost of the machine?

我尝试输入:sudo docker run --rm it --network=host mysql mysql -h 127.0.0.1 但输入 error 2003 (hy000) can't connect to mysql server on 127.0.0.1

  1. 我尝试将 mysql 连接器添加到 sqlalchemy uri,但未找到驱动程序

我不是设置这些的专家,我缺乏Docker机制..如果有人愿意指导我如何逐步解决这个问题,我将不胜感激..

更新----------------------------------------- -----:

-> 在 Mustafa Guler 添加 -p 3306:3306 之后,mysql 容器现在启动..

但是我仍然无法在Superset中添加数据库,我该怎么办?

您需要定义用户并作为环境传递,以便在 mysql 容器启动期间创建新用户。也许问题出在用户身上并传递 MYSQL_USER, MYSQL_PASSWORD 而且你没有在 docker 运行 上公开 3306 端口。请使用-p 3306:3306

我发现从头开始手动安装 Superset 比使用 Docker Container 中的 Superset 更适合我,因为手动从 docker 配置 Superset 可能有点麻烦,我所做的:

#-- 从头开始​​本地安装 Superset 和 MySQL ---#

  1. sudo pip install apache-superset (
  2. sudo apt install mysql-client-core-8.0
  3. sudo apt install mysql-server
  4. sudo pip install mysqlclient(对于超集数据库连接器)

#注意:在 pip 中还有一个名为 'superset' 的包,在我的例子中我卸载了它以确保只使用 apache-superset

  1. service mysql start

  2. mysql启动时,第一次尝试设置密码:

    sudo mysqladmin -u root 密码

然后进行测试:mysql -u root -p,输入创建的密码

如果能正常进入mysql,则密码设置成功,

  1. CREATE DATABASE 超集(这将保存超集进度将被保存的所有配置)

  2. 在apache superset中编辑config.py,通常位于/usr/local/lib/python3.8/dist-packages/superset/config.py(这取决于从1开始的pip安装),

8a) 编辑 config.py 中的 sqlalchemy uri 部分,使其可以连接到 ubuntu 中安装的本地 mysql,以像 'mysql://root:@localhost:3306/superset'

8b) 确保config.py中的数据库部分是超集,或者与MySQL

中创建的数据库同名
  1. 准备好所有数据库、sqlalchemy uri 和数据库名称后,可以按照以下声明的 Superset 配置进行操作:https://superset.apache.org/docs/installation/installing-superset-from-scratch

    A) sudo 超集数据库升级

    B) sudo superset fab create-admin

    C) sudo 超集加载示例

    D) sudo 超集初始化

    E) sudo superset 运行 -p 8088 --with-threads --reload --debugger (运行 每日启动超集)

  2. 运行 连接到数据库的私有 SSH 隧道(可选,在我的例子中,我使用 SSH 隧道访问数据库)

然后我可以在定义 sqlalchemy uri 的超集中本地添加连接

A) 朝向 SSH 隧道 mysql://(server_user):(server_password)@127.0.0.1:33063/(database_name) (这是在本地 MySQL 之外)

B) 朝向本地安装 MySQL 'mysql://root:rootpwd@127.0.0.1:3306/database_name'

您需要提供 docker 主机的 IP。如果您使用默认网络,请为主机使用静态 IP 172.17.0.1。 或者,您可以尝试 host.docker.internal 作为主机名。