【发布时间】:2022-12-07 05:32:09
【问题描述】:
我正在尝试使用两个单独的容器而不是 mysql 连接器在我的烧瓶应用程序和我的数据库之间建立一座桥梁。 我正在为我的应用程序使用 flask_mysqldb。
---docker-compose
App
|
|--app.py
|--dockerfile
db
|
|--dockerfile
|--db.sql
这是我的 Docker-compose 文件
version: '2'
services:
pythonapp:
build: ./NewtestPythonProject
command: sh -c "sleep 10s ; python3 ./main.py"
ports:
- '5000:5000'
depends_on:
- mysql
mysql:
build: ./MyDbDockerFile
restart: always
environment:
MYSQL_DATABASE: 'profile'
MYSQL_ROOT_PASSWORD: '1234'
ports:
- '3306:3306'
这是我的数据库 Dockerfile
FROM mysql:latest
COPY ./dcs.sql /docker-entrypoint-initdb.d/
这是我的应用程序 dockerfile
FROM python:3.9
WORKDIR /usr/app/src
COPY . /usr/app/src/
RUN pip3 install -r requirements.txt
EXPOSE 5000
这是我的连接字符串
from flask import *
from flask_mysqldb import MySQL
import yaml,re
import MySQLdb.cursors
from passlib.hash import pbkdf2_sha256
app = Flask(__name__)
app.secret_key = 'This'
#-----------------------------database connection-----------
db = yaml.load(open("db.yaml"),Loader=yaml.FullLoader)
app.config["MYSQL_HOST"] = db['mysql_host']
app.config["MYSQL_USER"] = db['mysql_user']
app.config["MYSQL_PASSWORD"] = db['mysql_password']
app.config["MYSQL_DB"] = db['mysql_db']
MySQL = MySQL(app)
数据库.yaml
mysql_host: "localhost"
mysql_user: "root"
mysql_password: "1234"
mysql_db: "profile"
【问题讨论】:
-
问题是什么 ?从你的 python webapp 你能到达 mysql:3306 吗?
-
@0x0fba 是我可以访问 mysql:3306,但是我无法连接我的应用程序和数据库容器。
-
什么样的麻烦?您的 webapp 可以连接到您的数据库吗?使用
docker logs可以帮助排除故障。 -
我的 Webapp 容器无法连接到我的 MySQL Docker 容器,但在我的本地环境中一切正常。我无法让我的两个容器相互通信。
-
您可以尝试将 docker-compose 更新到版本 3。并阅读容器的日志。
标签: python docker docker-compose sqlalchemy