繁体   English   中英

无法从 Tortoise/Python 连接到 Docker mySQL 实例,直到我第一次从 Docker PHPMyAdmin 连接到 mySQL 实例

[英]Cannot connect to Docker mySQL instance from Tortoise/Python, until I first connect to mySQL instance from Docker PHPMyAdmin

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

每次我运行 docker-compose up 时,所有服务都会成功启动,但是“rest”服务会在调试控制台中不断报告“无法连接到 mySQL db”。

该问题的一个非常奇怪的解决方法似乎是打开 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:
    db:
        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:

我的申请也有同样的问题。 当我检查异常堆栈跟踪时,我发现了这行代码:

'cryptography' package is required for sha256_password

所以我安装了密码学包:

pip install cryptography

我的问题得到了解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM