Python Docker MYSQL[2003]可以';t连接到MySQL服务器(111连接被拒绝)
我想在Docker容器上将python3连接到mysql(我使用Ubuntu18.04) 这是docker-compose.ymlPython Docker MYSQL[2003]可以';t连接到MySQL服务器(111连接被拒绝),python,mysql,python-3.x,docker,Python,Mysql,Python 3.x,Docker,我想在Docker容器上将python3连接到mysql(我使用Ubuntu18.04) 这是docker-compose.yml version: '3' services: # MySQL db: image: mysql:5.7 container_name: mysql_host environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test_database M
version: '3'
services:
# MySQL
db:
image: mysql:5.7
container_name: mysql_host
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_database
MYSQL_USER: user
MYSQL_PASSWORD: pass
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./db/data:/var/lib/mysql
- ./db/initdb.d:/docker-entrypoint-initdb.d
- ./log/mysql:/var/log/mysql
ports:
- 3306:3306
networks:
- python-network
python3:
restart: always
build:
context: ./python
container_name: "python3"
working_dir: "/root/src"
tty: true
volumes:
- ./python:/root/src
links:
- db
networks:
python-network:
driver: bridge
然后,我的cnf也跟着来了
# bind-address=127.0.0.1
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
user = user
password = pass
我检查集装箱是否在运行
user@ubuntu:/srv/docker/mysql$ sudo docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------
mysql_host docker-entrypoint.sh mysql Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp,33060/tcp
python3 python3 Up
然后我通过在mysql容器上执行'hostname-I'来查看mysql的ip地址
我将ip地址添加到下面的python脚本中
通过下面的脚本,python3尝试连接到mysql
import mysql.connector
## create connection
if __name__=="__main__":
conn = mysql.connector.connect(
host='192.168.64.2',
port='3306',
user='docker',
password='docker',
database='test_database')
print(conn.is_connected())
但是错误发生了
~/src # python3 main.py
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/mysql/connector/network.py", line 574, in open_connection
self.sock.connect(sockaddr)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 11, in <module>
database='test_database')
File "/usr/local/lib/python3.7/site-packages/mysql/connector/__init__.py", line 273, in connect
return MySQLConnection(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/mysql/connector/connection.py", line 107, in __init__
self.connect(**kwargs)
File "/usr/local/lib/python3.7/site-packages/mysql/connector/abstracts.py", line 1003, in connect
self._open_connection()
File "/usr/local/lib/python3.7/site-packages/mysql/connector/connection.py", line 350, in _open_connection
self._socket.open_connection()
File "/usr/local/lib/python3.7/site-packages/mysql/connector/network.py", line 580, in open_connection
_strioerror(err),
mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on '192.168.64.2:3306' (111 Connection refused)
~/src#python3 main.py
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.7/site packages/mysql/connector/network.py”,第574行,在open_连接中
self.sock.connect(sockaddr)
ConnectionRefusedError:[Errno 111]连接被拒绝
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“main.py”,第11行,在
数据库=“测试”\u数据库“)
文件“/usr/local/lib/python3.7/site packages/mysql/connector/_init__.py”,第273行,在connect中
返回MySQLConnection(*args,**kwargs)
文件“/usr/local/lib/python3.7/site packages/mysql/connector/connection.py”,第107行,在__
自我连接(**kwargs)
文件“/usr/local/lib/python3.7/site packages/mysql/connector/abstracts.py”,第1003行,在connect中
self.\u open\u connection()
文件“/usr/local/lib/python3.7/site packages/mysql/connector/connection.py”,第350行,在开放连接中
self.\u插座.打开\u连接()
文件“/usr/local/lib/python3.7/site packages/mysql/connector/network.py”,第580行,处于开放式连接中
_strioerror(err),
mysql.connector.errors.InterfaceError:2003:无法连接到'192.168.64.2:3306'上的mysql服务器(111连接被拒绝)
那么您能告诉我如何解决这个问题吗。您的mysql容器正在
python网络上运行。但是,您的python3容器没有在python网络上运行。将python网络
添加到python3容器中
python3:
重新启动:始终
建造:
上下文:./python
容器名称:“python3”
工作目录:“/root/src”
tty:是的
卷数:
-./python:/root/src
链接:
-分贝
网络:
-python网络
这两个容器不在同一个网络上:
因此无法相互通信。我建议删除文件中的所有网络:
块,并使用默认值网络组合。Docker文档对此进行了详细描述,包括描述您可以使用哪些主机名,这样您就不需要手动查找IP地址。我删除了所有网络,并执行MySQL连接。谢谢我添加网络:到python3,mysql连接被执行。非常感谢。