运行 python 和 mysql 出现 docker 错误 - 无法连接

running python and mysql with docker error - cannot connect

我正在使用 mysql-连接器,每当我 运行 容器使用 docker 时,我都会收到此错误:

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

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

我只想对数据库使用 phpmyadmin,请帮忙。

要从您的 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';

您现在将拥有一个 docker 运行 持久性 SQL 数据库。您从 Python 代码连接到它。我是 运行ning 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 方式进行连接。请注意,我假设这是在防火墙后面的本地,因此我忽略了任何安全方面的问题。