mysql.connector.errors.DatabaseError:2003(HY000):无法连接到'127.0.0.1'上的MySQL服务器(111)

时间:2019-08-25 01:17:46

标签: python mysql docker dockerfile mysql-python

我正在创建一个包含flask应用程序和mysql的docker文件。现在应该可以在localhost上运行。

flask应用正在运行,因此是mysql服务器。我能够连接到mysql服务器。该应用程序无法连接到数据库。

Python代码连接

def establish_connection():
    config = {
        'user': 'root',
        'password': 'root',
        'host': '127.0.0.1',
        'port': '3306',
        'database': 'persist'
    }

    cnx: str = mysql.connector.connect(**config)
    print(cnx)
    return cnx

Dockerfile

FROM python:3.7.4-buster
WORKDIR /stocksite
ENV FLASK_APP main.py
ENV FLASK_RUN_HOST 0.0.0.0
EXPOSE 5000 32000 3306
COPY . .
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"

  db:
    image: mysql
    container_name: db
    ports:
      - "32000:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./data/db:/docker-entrypoint-initdb.d

我收到以下错误:

mysql.connector.errors.DatabaseError:2003(HY000):无法连接到'127.0.0.1'(111)上的MySQL服务器

2 个答案:

答案 0 :(得分:1)

Docker compose服务可用于其他使用其名称的服务。您的db服务可以使用web

db:3306容器连接到
config = {
    'user': 'root',
    'password': 'root',
    'host': 'db',
    'port': '3306',
    'database': 'persist'
}

答案 1 :(得分:0)

在docker-compose中,您将容器内db的端口 3306 映射到主机上的端口 32000

在应用中,您应该使用端口 32000 ,而不是 3306

def establish_connection():
config = {
    'user': 'root',
    'password': 'root',
    'host': '127.0.0.1',
    'port': '32000',
    'database': 'persist'
}

cnx: str = mysql.connector.connect(**config)
print(cnx)
return cnx