繁体   English   中英

尝试使用烧瓶应用程序和 Mysql 数据库运行 docker-compose 时出错

[英]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将继续尝试为您的应用程序构建映像,并运行应用程序,该应用程序尝试连接数据库而不是准备好。 你可以在这里做两件事:

  1. 在您的应用程序中添加一个等待循环以尝试重试。 推荐
  2. 将诸如wait-for-it的解决方案添加到您的 docker compose 设置中。

您可以在此docker 文档页面中找到有关启动顺序设置的更多详细信息。

我建议在您的应用程序中添加一个简单的重试循环 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM