【问题标题】:running python and mysql with docker error - cannot connect运行带有 docker 错误的 python 和 mysql - 无法连接
【发布时间】:2020-12-26 20:25:37
【问题描述】:

我正在使用 mysql-connector,当我使用 docker 运行容器时,我收到此错误:

mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'db:3306' (-5 No address associated with hostname)

但是当我使用 python 运行项目时,它只执行没有错误

我只想将 phpmyadmin 用于数据库,请帮助。

【问题讨论】:

  • 数据库在哪里?它在码头集装箱内吗?您是否在单独的 docker 容器中创建了数据库?我倾向于为每个组件分别创建一个 docker 容器,然后打开端口以允许它们之间的通信。请注意,如果您为数据库构建单独的 docker,您将需要在 docker 中安装一个单独的存储文件夹以保持数据的持久性。如果您对此感兴趣,我可以粘贴一些您可以使用的示例代码。
  • 听起来不错,是的,我也想要它真的很紧急
  • 顺便说一句,数据库位于 main.py 和 docker 容器中

标签: python docker mysql-connector


【解决方案1】:

从你的 linux 机器上创建一个 docker:

docker pull mysql:latest

要运行它并在 3306(mysql 的标准端口)上挂载一个具有端口访问权限的持久文件夹:

docker run --name=mysql_dockerdb --env="MYSQL_ROOT_PASSWORD=<your_password>" -p 3306:3306 -v /home/ubuntu/sql_db/<your_dbasename>:/var/lib/mysql -d mysql:latest

要连接到 docker 实例,以便您可以在 docker 中创建数据库:

docker exec -it mysql_dockerdb mysql -uroot -p<your_password>

建立数据库的我的SQL代码:

CREATE DATABASE dockerdb;
CREATE USER 'newuser'@'%' IDENTIFIED BY 'newpassword';
GRANT ALL PRIVILEGES ON dockerdb.* to 'newuser'@'%';
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'userpassword';

您现在将拥有一个运行持久 SQL 数据库的 docker。您可以从 Python 代码连接到它。我正在运行 Flask mySql。您需要将密码保存在环境变量中。我使用的是 Mac,因此我的 ~/.bash_profile 包含:

export RDS_LOGIN="mysql+pymysql://<username>:<userpassword>@<dockerhost_ip>/dockerdb"

在 Python 中:

import os

SQLALCHEMY_DATABASE_URI = os.environ.get('RDS_LOGIN')

此时您应该能够以通常的 Python 方式进行连接。请注意,我假设这是防火墙后的本地,因此我忽略了任何安全方面。

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 2015-04-30
    • 2021-02-15
    • 2021-06-20
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2019-02-23
    相关资源
    最近更新 更多