[英]Error Trying to run docker-compose with flask application and Mysql database
运行docker-compose up
时出现此错误,我不知道为什么,尝试对其进行研究,但我发现的所有解决方案均无效。 如果有人知道,如果你能分享它会很棒。 谢谢!
错误
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'mysql' ([Errno -2] Name or service not known)")
这是我docker-compose.yml
文件。 它有 2 个需要构建的图像。
码头工人-compose.yml
version: "3.7"
services:
web:
build: .
depends_on:
- mysql
ports:
- 5000:5000
links:
- mysql
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: 12345678
MYSQL_DB: flaskmysql
mysql:
image: mysql:5.7
ports:
- "32000:3306"
volumes:
- ./mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 12345678
MYSQL_DATABASE: flaskmysql
volumes:
mysql-data:
这是我的 Dockerfile,它包含运行我的应用程序的所有步骤。
Dockerfile
FROM python:3.9-slim-buster
RUN apt-get update && apt-get install -y git python3-dev gcc gfortran libopenblas-dev liblapack-dev \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --upgrade -r requirements.txt
COPY app app/
RUN python app/server.py
EXPOSE 5000
CMD ["python", "app/server.py", "serve"]
在这里,我有几行代码尝试与 docker-compose 使用给定图像创建的服务建立连接。
服务器.py
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']= 'mysql+pymysql://root:12345678@mysql:3306/flaskmysql'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']= False
我相信您在这里遇到了竞争状况。 即使您已经为应用程序指定了depends_on
依赖项,请注意 docker docker-compose
在继续下一步之前不会“等待”数据库可用。 那是因为docker-compose
不“知道”这个服务“准备好”意味着什么。
这意味着,只要容器处于“运行”状态(仍然可以初始化数据库), docker-compose
将继续尝试为您的应用程序构建映像,并运行应用程序,该应用程序尝试连接数据库而不是准备好。 你可以在这里做两件事:
wait-for-it
的解决方案添加到您的 docker compose 设置中。您可以在此docker 文档页面中找到有关启动顺序设置的更多详细信息。
我建议在您的应用程序中添加一个简单的重试循环 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.