无法从Tortoise/Python连接到Docker mySQL实例,除非我先从Docker PHPMyAdmin连接到MySQL实例。

1 人关注

下面docker-compose.yaml中描述的 "rest "服务在启动时运行一个python脚本,试图连接到 "db "服务的mysql实例。

每次我运行docker-compose时,所有的服务都能成功启动,但是 "rest "服务在调试控制台上不断地报告 "无法连接到mySQL数据库"。

一个非常奇怪的解决方法似乎是先打开phpMyAdmin,并通过它登录到mySQL实例。 一旦我从 phpMyAdmin 登录到 mySQL 数据库,我回到 docker-compose 控制台,我看到 "rest "python 脚本已经成功建立了数据库连接。

我反复验证了这种行为,但我不明白为什么mySQL实例需要我先用phpMyAdmin登录,然后才能让python脚本建立自己的连接。

我的Python/Tortoise连接代码如下。

DATABASE_URL = "mysql://{}:{}@{}:{}/{}".format(
    os.environ["MYSQL_USER"],
    os.environ["MYSQL_PASSWORD"],
    os.environ["MYSQL_HOST"],
    os.environ["MYSQL_PORT"],
    os.environ["MYSQL_DATABASE"],
register_tortoise(
    app, db_url=DATABASE_URL, modules={"models": ["models"]}, generate_schemas=False

Docker-compose.yaml

services: image: mysql:latest restart: always environment: MYSQL_DATABASE: "bbms" MYSQL_USER: "bbms" MYSQL_PASSWORD: "B37PTdaWvbUQm" MYSQL_ROOT_PASSWORD: "asdasdasdasd" ports: - "3306:3306" volumes: - dbdata:/var/lib/mysql phpmyadmin: image: phpmyadmin:latest depends_on: [ db ] ports: - "8080:80" environment: - PMA_HOST=db - PMA_PORT=3306 restart: unless-stopped rest: build: context: ./ dockerfile: ./docker/rest/Dockerfile restart: always depends_on: [ db ] environment: MYSQL_DATABASE: "bbms" MYSQL_USER: "bbms" MYSQL_PASSWORD: "B37PTdaWvbUQm" MYSQL_HOST: db MYSQL_PORT: 3306 volumes: - ./src:/app ports: - "5000:5000" networks: default: name: qibbms_net ipam: driver: default config: - subnet: "172.12.2.0/24" volumes: dbdata:
python
mysql
docker
docker-compose
tortoise-orm
Scratcha
Scratcha
发布于 2021-10-16
1 个回答
Soheyl Daliraan
Soheyl Daliraan
发布于 2022-07-10
已采纳
0 人赞同

我的应用程序也有同样的问题。 当我检查异常堆栈跟踪时,我发现了这一行代码。

'cryptography' package is required for sha256_password