gpt4 book ai didi

python - 无法使用 python 访问 mysql 数据库(都在不同的容器上运行)

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:53 25 4
gpt4 key购买 nike

我正在尝试使用 python 程序连接到 mysql 数据库。在本地运行时有效。

但是在对我创建的应用程序进行 docker 化时,一个容器用于 python 代码,另一个用于 mysql 数据库,当我以这种方式运行时,它无法连接。

Python_代码:

db.bind(provider='mysql', user='docker_root', password='password', host='db', database=database, port = 3306)

docker 组成:

version: "3"
services:
app:
image: app:latest
links:
- db
ports:
- "8001:8081"
environment:
- DB_HOST= db

db:
image: mysql:5.7.26
restart: always
environment:
MYSQL_DATABASE: 'my_db'
MYSQL_USER: 'docker_root'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
ports:
- "3306:3306"
volumes:
- ./DB_config/:/etc/mysql/mysql.conf.d

并且 docker-compose up 失败并出现错误:

pony.orm.dbapiprovider.OperationalError: (2003, "Can't connect to MySQL server on 'db' ([Errno 111] Connection refused)")

我哪里错了?请指教!

最佳答案

如果应用程序无法连接到 MySQL,我会建议您退出应用程序并将重启策略设置为始终,因为 depends_on 不能保证当 app< 时 MySQL 会完全启动 开始,但把它放在那里很好。

version: "3"
services:
app:
image: app:latest
restart: always
links:
- db
ports:
- "8001:8081"
environment:
- DB_HOST= db
depends_on:
- db

db:
image: mysql:5.7.26
restart: always
environment:
MYSQL_DATABASE: 'my_db'
MYSQL_USER: 'docker_root'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
ports:
- "3306:3306"
volumes:
- ./DB_config/:/etc/mysql/mysql.conf.d

你的应用程序代码应该是这样的:

try:
db.bind(provider='mysql', user='docker_root', password='password', host='db', database=database, port = 3306)
except:
# write some logs
exit(1)

关于python - 无法使用 python 访问 mysql 数据库(都在不同的容器上运行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56274577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com