[英]How to connect to a mysql database on localhost from a python script in a docker container
[英]Connect python script to mysql in docker
我想将我的 python 脚本连接到 docker 中的 MySQL。 这是我的 docker-compose 文件:
version: '3.7'
services:
mysql:
image: mariadb:${MARIADB_VERSION:-latest}
container_name: mysql
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-password}
- MYSQL_USER=${MYSQL_USER:-root}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
- MYSQL_DATABASE=${MYSQL_DATABASE:-db}
restart: always
script:
container_name: script
build: ./test_db
command: bash -c "python3 testDb.py"
environment:
- DB_NAME=db
- HOST=mysql
- DB_USER=root
- DB_PASSWORD=password
volumes:
- ./test_db:/var/www/html/script
depends_on:
- mysql
这是我的 Python 脚本文件:
import pymysql
class TestDb:
def run(self):
conn = pymysql.connect(host='mysql', port=3306, database='db', user='root', password='password')
print(conn)
if __name__ == "__main__":
TestDb().run()
这是我的错误:
script | Traceback (most recent call last):
script | File "/test_db/testDb.py", line 10, in <module>
script | TestDb().run()
script | File "/test_db/testDb.py", line 5, in run
script | conn = pymysql.connect(host='mysql', port=3306, database='sta_db', user='root', password='Alphashadow1381')
script | File "/usr/local/lib/python3.9/site-packages/pymysql/__init__.py", line 94, in Connect
script | return Connection(*args, **kwargs)
script | File "/usr/local/lib/python3.9/site-packages/pymysql/connections.py", line 327, in __init__
script | self.connect()
script | File "/usr/local/lib/python3.9/site-packages/pymysql/connections.py", line 619, in connect
script | raise exc
script | pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'mysql' ([Errno 111] Connection refused)")
如何将我的 Python 脚本连接到 docker 中的 MySQL?
这通常意味着端口未打开,或者主机名有问题!
您还没有将端口暴露给外界,也许添加这一行
services:
mysql:
image: mariadb:${MARIADB_VERSION:-latest}
container_name: mysql
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-password}
- MYSQL_USER=${MYSQL_USER:-root}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
- MYSQL_DATABASE=${MYSQL_DATABASE:-db}
restart: always
ports:
- "3306:3306"
我认为您忘记打开端口将其添加到您的 docker-copose:端口:-“3306:3306”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.