[英]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.