mysql.connector.errors.DatabaseError:

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


烧瓶应用程序正在运行,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"]

码头工人-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): Can't connect to MySQL server on '127.0.0.1' (111)


婷婷同学_
浏览 372回答 2
2回答

慕桂英3389331

Docker compose 服务可用于使用其名称的其他服务。您的db服务可以使用从您的web容器连接到db:3306config = {    'user': 'root',    'password': 'root',    'host': 'db',    'port': '3306',    'database': 'persist'}

慕森卡

在 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python