繁体   English   中英

Docker MYSQL [2003] 无法连接到 MySQL 服务器(111 连接被拒绝)

[英]Docker MYSQL [2003] Can't connect to MySQL server (111 Connection refused)

我想将 python3 连接到 Docker 容器上的 mysql (我使用 ubuntu 18.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

然后,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

我检查容器是否正在运行。

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)

那你能告诉我如何解决它。

您的mysql容器正在python-network网络上运行。 但是,您的python3容器未在python-network上运行。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM