Python mysql.connector.errors.DatabaseError:2003(HY000):Can';t连接到';127.0.0.1';(111)
我正在创建一个docker文件,其中包含一个flask应用程序和mysql。现在应该在本地主机上运行 flask应用程序正在运行,mysql服务器也在运行。我能够连接到mysql服务器。应用程序无法连接到数据库 Python代码连接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)
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容器中运行。在这些情况下,容器名称充当主机名