Python mysql.connector.errors.DatabaseError:2003(HY000):Can';t连接到';127.0.0.1';(111)

Python mysql.connector.errors.DatabaseError:2003(HY000):Can';t连接到';127.0.0.1';(111),python,mysql,docker,dockerfile,mysql-python,Python,Mysql,Docker,Dockerfile,Mysql Python,我正在创建一个docker文件,其中包含一个flask应用程序和mysql。现在应该在本地主机上运行 flask应用程序正在运行,mysql服务器也在运行。我能够连接到mysql服务器。应用程序无法连接到数据库 Python代码连接 def建立_连接(): 配置={ '用户':'根', '密码':'根', “主机”:“127.0.0.1”, “端口”:“3306”, “数据库”:“持久化” } cnx:str=mysql.connector.connect(**config) 印刷品(cnx)

我正在创建一个docker文件,其中包含一个flask应用程序和mysql。现在应该在本地主机上运行

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

Python代码连接

def建立_连接():
配置={
'用户':'根',
'密码':'根',
“主机”:“127.0.0.1”,
“端口”:“3306”,
“数据库”:“持久化”
}
cnx:str=mysql.connector.connect(**config)
印刷品(cnx)
返回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):无法连接到docker compose中“127.0.0.1”(111)上的mysql服务器。将容器中db的端口映射到主机上的端口3306

在应用程序中,您应该使用端口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

Docker compose服务可用于使用其名称的其他服务。使用
db:3306

config = {
    'user': 'root',
    'password': 'root',
    'host': 'db',
    'port': '3306',
    'database': 'persist'
}
您需要将“db”设置为数据库的主机名,因为它也在docker容器中运行。在这些情况下,容器名称充当主机名