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



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

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

蟒蛇代码连接

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' 上的 MySQL 服务器 (111)

Docker 组合服务可用于使用其名称的其他服务。可以使用db:3306web容器连接到db服务

config = {
'user': 'root',
'password': 'root',
'host': 'db',
'port': '3306',
'database': 'persist'
}

在 docker compose 中,将容器内数据库的端口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

相关内容

最新更新