Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Docker MYSQL[2003]可以';t连接到MySQL服务器(111连接被拒绝)_Python_Mysql_Python 3.x_Docker - Fatal编程技术网

Python Docker MYSQL[2003]可以';t连接到MySQL服务器(111连接被拒绝)

Python 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

我想在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
      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连接被执行。非常感谢。