簡體   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