【发布时间】:2021-12-28 14:57:59
【问题描述】:
我已经阅读了this thread 和许多其他教程,但仍然无法使连接正常工作。
我创建了两个容器,它们在同一个网络net_a,MySQL容器是使用这个命令创建的:
docker run -itd --name mysql_a -p 3319:3306 -e MYSQL_ROOT_PASSWORD=passwd --network net_a mysql:latest
在另一个容器中,我想使用 PyMySQL 访问 MySQL 数据库 db_a,我尝试了这个:
import pymysql.cursors
connection = pymysql.connect(
host="mysql_a",
user="root",
password="passwd",
database="db_a",
port=3319, charset="utf8")
cur = connection.cursor()
但出现错误:
--> 353 self.connect() 354 355 def 进入(自我):
/usr/local/lib/python3.8/dist-packages/pymysql/connections.py 在 连接(自我,袜子) 662 如果调试: 第663章 --> 664 提高 exc 665 666 # 如果e既不是DatabaseError也不是IOError,这是一个bug。
OperationalError: (2003, "Can't connect to MySQL server on 'mysql_a' ([Errno 111] 连接被拒绝)")
我以为是因为它们不在同一个网络上,然后我从另一个容器 ping 容器名称 mysql_a,它显示如下:
PING mysql_a (172.18.0.3) 56(84) bytes of data.
64 bytes from mysql_a.net_a (172.18.0.3): icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from mysql_a.net_a (172.18.0.3): icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from mysql_a.net_a (172.18.0.3): icmp_seq=3 ttl=64 time=0.061 ms
64 bytes from mysql_a.net_a (172.18.0.3): icmp_seq=4 ttl=64 time=0.061 ms
我想知道为什么它不起作用?也许单主机桥接网络在这种情况下不起作用,我应该学习一些关于多主机覆盖网络的知识?
【问题讨论】:
标签: python mysql docker containers pymysql