我正在创建一个包含烧瓶应用程序和 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 cnxDockerfileFROM python:3.7.4-busterWORKDIR /stocksiteENV FLASK_APP main.pyENV FLASK_RUN_HOST 0.0.0.0EXPOSE 5000 32000 3306COPY . .COPY requirements.txt requirements.txtRUN pip install -r requirements.txtCOPY . .CMD ["flask", "run"]码头工人-compose.ymlversion: '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)
2 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
Docker compose 服务可用于使用其名称的其他服务。您的db服务可以使用从您的web容器连接到db:3306
config = {
'user': 'root',
'password': 'root',
'host': 'db',
'port': '3306',
'database': 'persist'
}
慕森卡
TA贡献1806条经验 获得超8个赞
在 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
添加回答
举报
0/150
提交
取消