[英]Docker MYSQL [2003] Can't connect to MySQL server (111 Connection refused)
I'd like to connect python3 to mysql on Docker Container (I use ubuntu 18.04)我想将 python3 连接到 Docker 容器上的 mysql (我使用 ubuntu 18.04)
Here is docker-compose.yml这是 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
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
And then, my.cnf is following然后,my.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
I check containers is runnning.我检查容器是否正在运行。
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
And then I see the ip address of mysql by executing ' hostname -i' on mysql container.然后我通过在 mysql 容器上执行 'hostname -i' 看到 mysql 的 ip 地址。
And I add the ip address to following python script.我将 ip 地址添加到以下 python 脚本中。
With following script, python3 try to connect to mysql.使用以下脚本,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())
But error occurs但是发生错误
~/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)
So could you tell me how to solve it.那你能告诉我如何解决它。
Your mysql container is running on python-network
network.您的mysql容器正在
python-network
网络上运行。 However your python3 container is not running on python-network
.但是,您的python3容器未在
python-network
上运行。 Add python-network
to python3 container,将
python-network
添加到python3容器,
python3:
restart: always
build:
context: ./python
container_name: "python3"
working_dir: "/root/src"
tty: true
volumes:
- ./python:/root/src
links:
- db
networks:
- python-network
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.