在下面的docker中描述的“rest”服务-Compose.yaml在启动时运行一个python脚本,试图连接到'db‘服务的mysql实例。
每次我运行docker时,所有服务都会成功启动,但是“rest”服务报告“无法连接到mySQL db”,在调试控制台中连续运行。
这个问题的一个非常奇怪的解决方法似乎是打开phpMyAdmin,并首先通过它登录到mySQL实例。一旦我从mySQL登录到phpMyAdmin数据库,我将返回到docker-compose控制台,并且我看到'rest‘python脚本已经成功地建立了它的db连接。
我已经一遍又一遍地验证了这种行为,但是不知道为什么mySQL实例需要我在python脚本建立自己的连接之前登录phpMyAdmin .
我的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:发布于 2022-07-09 21:54:24
我的申请也有同样的问题。当我检查异常堆栈跟踪时,我发现了这一行代码:
'cryptography' package is required for sha256_password所以我安装了密码软件包:
pip install cryptography我的问题解决了。
https://stackoverflow.com/questions/69591624
复制相似问题