我正在创建一个包含flask应用程序和mysql的docker文件。现在应该可以在localhost上运行。
flask应用正在运行,因此是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"]
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'(111)上的MySQL服务器
答案 0 :(得分:1)
Docker compose服务可用于其他使用其名称的服务。您的db
服务可以使用web
db:3306
容器连接到
config = {
'user': 'root',
'password': 'root',
'host': 'db',
'port': '3306',
'database': 'persist'
}
答案 1 :(得分:0)
在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