Docker Flask容器自动退出求助:无法连接MySQL与访问应用
Flask容器启动后立即退出(Exited (1))的排查与解决
1. 优先查看容器日志定位错误
容器退出代码1通常是应用运行时抛出异常导致的,直接拉取日志是最快的问题定位方式:
docker logs flaskapp
日志会显示python app.py执行过程中的具体报错,比如MySQL连接失败、环境变量读取异常、依赖包缺失等关键信息。
2. 确认MySQL容器状态与网络连通性
- 先检查MySQL容器是否正常运行,且处于指定网络中:
如果MySQL容器未启动,先启动它,确保容器名称为docker ps | grep mysqlmysql(与你设置的MYSQL_HOST环境变量值一致),且加入了twotier网络。 - 临时启动Flask容器测试网络连通性:
进入容器后,先测试与MySQL的网络连通:docker run --rm -it --network=twotier flaskapp:latest bash
再用MySQL客户端验证账号密码和数据库是否可用:ping mysqlmysql -h mysql -u admin -padmin myDb
3. 验证环境变量是否正确传递
检查容器内的环境变量是否正确设置:
# 若容器已退出,用上面的临时启动方式进入容器后执行 env | grep MYSQL_
确认MYSQL_HOST、MYSQL_USER等变量的拼写和值是否与启动命令一致,避免因拼写错误导致连接失败。
4. 检查应用代码的数据库连接逻辑
查看仓库中的app.py代码,确认:
- 是否正确通过
os.getenv()读取环境变量,有没有错误的默认值覆盖了传入的变量 - 是否在MySQL容器完全就绪前就发起了连接请求(可添加连接重试逻辑避免启动时的时序问题)
5. 验证Dockerfile构建的镜像完整性
检查Dockerfile是否安装了所有必要依赖(比如flask、mysql-connector-python等),工作目录设置是否正确,启动命令python app.py是否符合代码结构。
内容的提问来源于stack exchange,提问作者Sohaib Samad
相关产品推荐
相关产品推荐

